< 문제 >
https://www.acmicpc.net/problem/1212
1212번: 8진수 2진수
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
www.acmicpc.net
< 틀린 풀이>
package bronze;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//8진수 2진수
public class p1212 {
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String n=br.readLine();
String binary[]= {"000","001","010","011","100","101","110","111"};
StringBuilder sb=new StringBuilder();
for(int i=0;i<n.length();i++) {
int num=n.charAt(i)-'0';
sb.append(binary[num]);
}
String answer=sb.toString();
if(answer.charAt(0)=='0') {
if(!n.equals("0")) {
while(answer.charAt(0)=='0')
answer=answer.substring(1);
}
}
System.out.println(answer);
}
}
🙅🏻♂️ 틀린 이유
1. 처음에 나는 0을 입력했을 때는 000이 나와야된다고 생각했다.
그래서 0일 때 출력 형태를 고치지 않아 계속 틀렸다. 🥹
2. 처음 풀이(위의 풀이는 2번째 풀이)에서는 앞에 0이 하나만 올 수 있다고 생각해서
그저 substring(1)을 한 값을 출력해서 틀렸다. (왜 그렇게 생각했는지 모르겠다.)
ex) 101 = 001000001 이므로 0이 다 없어질 때까지 반복문을 돌아야한다.
<올바른 풀이>
package bronze;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//8진수 2진수
public class p1212 {
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String n=br.readLine();
String binary[]= {"000","001","010","011","100","101","110","111"};
StringBuilder sb=new StringBuilder();
for(int i=0;i<n.length();i++) {
int num=n.charAt(i)-'0';
sb.append(binary[num]);
}
if(n.equals("0")) //입력받은 수가 0일 때
System.out.println(n); //0을 출력
else { //입력 받은 수가 0이 아닐때
while(sb.charAt(0)=='0') { //맨 앞의 수가 0인 경우 반복문 돌기
sb=new StringBuilder(sb.substring(1)); //문자열 자르기
}
System.out.println(sb);
}
}
}
✏️ 풀이 방법
1. 입력 받은 수는 8진수이므로 0~7의 값만 갖고 있다.
그렇기 때문에 String형의 배열에 0~7 의 2진수 값을 저장한다.
2. 입력 받은 수의 길이만큼 반복문을 돌면서,
각 자리에 해당하는 수를 2진수로 변환해 StringBuilder를 사용하여 값을 붙인다.
ex) 314 의 경우, sb= 011001100
3. 입력 받은 수가 0 일 경우에는 0을 그대로 출력하고,
0이 아닌 경우에는 앞자리의 0이 없어질 때까지 substring(1)을 반복하며
sb의 값을 변경하고 출력한다.
✍🏻 느낀점
나는 조건을 따져서 예외 처리 하는 것을 잘 못하는 것 같다.
문제를 읽고, 어떻게 조건을 나눠서 처리해야할지를
먼저 생각해야겠다. 계속 풀면 나아지겠지..?
'코딩테스트 > Baekjoon' 카테고리의 다른 글
[JAVA] 백준 18429번: 근손실 (1) | 2024.03.11 |
---|---|
[JAVA] 백준 1966번: 프린터 큐 (1) | 2024.03.08 |
[JAVA] 백준 1075번: 나누기 (2) | 2024.01.09 |
[JAVA] 백준 1032번: 명령 프롬프트 (1) | 2024.01.08 |
[JAVA] 백준 1009번: 분산처리 (1) | 2024.01.08 |