[백준] 1212. 8진수 2진수

1 분 소요

문제 링크

[백준] 1212. 8진수 2진수


풀이 과정

[백준] 1373. 2진수 8진수와 반대로, 8진수를 2진수로 변환하는 문제입니다. 반대로, 각 자리에 위치하는 수를 2진수로 변환해 이어 붙이면 2진수로 변환할 수 있습니다.


for (int i = 0; i < oct.length; i++) {
    StringBuilder bin = new StringBuilder(Integer.toBinaryString(ctoi(oct[i])));
    while (bin.length() != 3) bin.insert(0, 0);
    answer.append(bin);
}

예를 들어, 8진수 314의 각 자리 수를 2진수로 변환하면 “11”, “1”, “100”으로 표현됩니다. 각 그룹이 3비트로 구성되어야 하므로, 3비트를 만족할 때까지 앞에 0을 붙여줍니다.


while (idx < answer.length() && answer.charAt(idx) == '0') {
    idx++;
}

위 과정에서 맨 왼쪽 비트가 0일 수 있습니다. 0으로 시작할 수 없으므로, 1을 만나는 곳의 인덱스를 idx에 구합니다.


System.out.println(idx == answer.length() ? 0 : answer.substring(idx));

idx가 변환된 문자열의 길이를 넘어가면, 그 값은 0을 의미하므로 0을 출력하고, 그렇지 않다면 idx를 시작으로 문자열을 잘라 출력합니다.


코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] oct = sc.nextLine().toCharArray();
        StringBuilder answer = new StringBuilder();
        int idx = 0;

        for (int i = 0; i < oct.length; i++) {
            StringBuilder bin = new StringBuilder(Integer.toBinaryString(ctoi(oct[i])));
            while (bin.length() != 3) bin.insert(0, 0);
            answer.append(bin);
        }

        while (idx < answer.length() && answer.charAt(idx) == '0') {
            idx++;
        }

        System.out.println(idx == answer.length() ? 0 : answer.substring(idx));
    }

    static int ctoi(char c) { return c - '0'; }
}

카테고리:

업데이트:

댓글남기기