[백준] 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'; }
}
댓글남기기