Dazzling 개발 노트

[백준] 1212 - 8진수 2진수 (Java) 본문

Algorithm/백준

[백준] 1212 - 8진수 2진수 (Java)

dj._.dazzling 2023. 10. 16. 11:30

[백준] 1212 - 8진수 2진수 (Java)

문제

https://www.acmicpc.net/problem/1212

풀이/후기

브론즈 문제이지만 디테일이 중요한 문제였다.

일단 8진수를 바로 2진수로 변경하는 방법이 떠오르지 않아 8진수 > 10진수 > 2진수 이렇게 변환하는 것을 생각했는데,

이 풀이는 오답이다.

 

8진수는 한 자리씩 잘라 3자리의 2진수로 변경이 가능하다.

3 = 011

1 = 001

4 = 100

314 = 011001100

수는 반드시 1로 시작해야 하므로 가장 앞의 0은 제거해야 한다.

 

미리 8진수로 나올 수 있는 2진수를 배열로 구성해 두고,

주어진 8진수를 한 자리씩 잘라 해당되는 배열의 값으로 대체하여 StringBuilder에 넣어준다.

완성된 StringBuilder에서 가장 앞자리가 0인 경우 substring을 이용해 문자열 가장 앞을 잘라준다.

 

코드

package Implementation;

import java.io.*;

public class Problem1212 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        String[] b = {"000", "001", "010", "011", "100", "101", "110", "111"};

        StringBuilder sb = new StringBuilder();
        for (int i=0; i<str.length(); i++){
            int a = str.charAt(i) - '0';
            //System.out.println(a);
            sb.append(b[a]);
        }

        if (str.equals("0")) System.out.println(str);
        else {
            while (sb.charAt(0) == '0'){
                sb = new StringBuilder(sb.substring(1));
            }
            System.out.println(sb);
        }

    }
   
}

Commit

https://github.com/allrightDJ0108/CodingTestStudy/commit/350ff843532122668d82fd7838dc8e8bd3b0590f

참고

https://ming9mon.tistory.com/159