백준/Java

[백준 자바] 1212번(8진수 2진수) - 8진수를 2진수로 바꾸기

gamzaggang7 2024. 6. 19. 00:24
728x90

난이도 - 브론즈 2

 

문제

8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.

입력

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

출력

첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.

 


 

728x90

8진수를 2진수로 바꾸는 방법은 8진수의 각 숫자를 3비트의 이진수로 변환하여 순서대로 붙이는 것이다.

314로 예를 들면 

3 => 011

1 => 001

4 => 100

최종적으로 2진수 값은 011001100이 된다.

 

입력값이 0인 경우에는 0을 바로 출력하고 0이 아닌 경우에는 8진수를 2진수로 바꾸는 octalToBinary 함수를 호출한다.

8진수의 각 숫자에 해당하는 2진수 비트를 octalDigitToBinary 함수로 받아낸다. 출력값의 앞에 0이 붙어있으면 안되므로 첫번째 8진수 값은 octalDigitToBinaryFirst 함수로 2진수로 변환한다.

import java.io.*;

public class Main1212 {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    String N = br.readLine();

    if (N.equals("0")) {
      bw.write("0");
    } else {
      bw.write(octalToBinary(N));
    }

    bw.flush();
    br.close();
    bw.close();
  }

  static String octalToBinary(String octal) {
    StringBuffer binary = new StringBuffer();

    binary.append(octalDigitToBinaryFIrst(octal.charAt(0)));

    for (int i = 1; i < octal.length(); i++) {
      binary.append(octalDigitToBinary(octal.charAt(i)));
    }

    return binary.toString();
  }

  static String octalDigitToBinary(char c) {
    switch (c) {
      case '0':
        return "000";
      case '1':
        return "001";
      case '2':
        return "010";
      case '3':
        return "011";
      case '4':
        return "100";
      case '5':
        return "101";
      case '6':
        return "110";
      case '7':
        return "111";
      default:
        return "";
    }
  }

  static String octalDigitToBinaryFIrst(char c) {
    switch (c) {
      case '0':
        return "";
      case '1':
        return "1";
      case '2':
        return "10";
      case '3':
        return "11";
      case '4':
        return "100";
      case '5':
        return "101";
      case '6':
        return "110";
      case '7':
        return "111";
      default:
        return "";
    }
  }
}

728x90