알고리즘/백준
공부 113일차: 백준 1212번 8진수 2진수 자바 java
김발자~
2022. 11. 20. 16:47
반응형
1212 8진수 2진수
https://www.acmicpc.net/problem/1212
1212번: 8진수 2진수
첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.
www.acmicpc.net
백준 1212번 문제 8진수 2진수
문제
과정 생각해보기 & 오답
https://gimbalja.tistory.com/193
공부 112일차: 백준 1373번 2진수 8진수 자바 java
1373 2진수 8진수 https://www.acmicpc.net/problem/1373 1373번: 2진수 8진수 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. www.acmicpc.net 백준 1373번 문제 2진수 8진수 문제 과정 생
gimbalja.tistory.com
2진수를 8진수로 바꾼 문제를 참고하면 좋을 듯하다
8진수에서 올 수 있는 숫자는 0~7로 제한되어 있다이에 따라 각각의 수는 2진수로000 001 010 011 100 101 110 111로 변환 가능하다
수가 많지 않기 때문에 switch문으로 표현할 수 있다
다만, 2진수의 첫 글자는 무조건 1로 시작해야 하기 때문에 앞에 0이 붙는다면 빼준다
정답 인정 코드
1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Boj1212 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String octal = br.readLine();
int len = octal.length();
switch(octal.charAt(0)-'0') { // 첫자리엔 0이 붙어선 안 된다
case 7 :
sb.append(111);
break;
case 6 :
sb.append(110);
break;
case 5 :
sb.append(101);
break;
case 4 :
sb.append(100);
break;
case 3 :
sb.append(11);
break;
case 2 :
sb.append(10);
break;
case 1 :
sb.append(1);
break;
case 0 :
sb.append(0); //000을 입력해도 오류가 나지 않도록
break;
}
for(int i = 1; i < len; i++) {
switch(octal.charAt(i)-'0') {
case 7 :
sb.append(111);
break;
case 6 :
sb.append(110);
break;
case 5 :
sb.append(101);
break;
case 4 :
sb.append(100);
break;
case 3 :
sb.append("011"); // 문자열이 아닌 숫자로 입력하면 앞에 붙은 0이 생략된다
break;
case 2 :
sb.append("010");
break;
case 1 :
sb.append("001");
break;
case 0 :
sb.append("000");
break;
}
}
System.out.println(sb);
}
}
|
cs |
정답으론 인정됐지만, 0만 지우면 될 것을 switch문이 두 번 반복되기 때문에 좋은 코드라곤 볼 수 없다
2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String octal = br.readLine();
int len = octal.length();
for(int i = 0; i < len; i++) {
switch(octal.charAt(i)-'0') {
case 7 :
sb.append("111");
break;
case 6 :
sb.append("110");
break;
case 5 :
sb.append("101");
break;
case 4 :
sb.append("100");
break;
case 3 :
sb.append("011");
break;
case 2 :
sb.append("010");
break;
case 1 :
sb.append("001");
break;
case 0 :
sb.append("000");
break;
}
}
// 앞의 0이 붙는 최대 개수는 2개 -> 0은 최대 2번 삭제
for(int i = 0; i < 2; i++) {
if(sb.charAt(0) - '0' == 0) {
sb.deleteCharAt(0);
}
}
System.out.println(sb);
}
}
|
cs |
마지막에 0을 두 개까지만 삭제하는 코드를 넣어 깔끔하게 만들었다
반응형