알고리즘/백준

공부 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을 두 개까지만 삭제하는 코드를 넣어 깔끔하게 만들었다 

 

 

 


 

반응형