Dazzling 개발 노트
[백준] 1212 - 8진수 2진수 (Java) 본문
[백준] 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