본문 바로가기

Algorithm/Baekjoon Oline Judge - Java

[백준] 1212 8진수 2진수

 

 

Bronze

 

 

문제

 

8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.

 

 

입력

 

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

 

 

출력

 

첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.

 

 


 

풀이

 

import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String oct = sc.nextLine();
        
        // 0부터 7까지의 8진수를 대응하는 3비트 2진수 문자열 
        String[] binary = {"000", "001", "010", "011", "100", "101", "110", "111"};
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<oct.length(); i++){
            int num = oct.charAt(i)-'0';
            
            // 첫번째 자리는 앞자리 0을 제외할 수 있도록 처리 
            // 문자열 -> 숫자(0처리) -> 문자열 
            if(i==0){
                sb.append(String.valueOf(Integer.parseInt(binary[num])));    
            }
            else{
                sb.append(binary[num]);
            }
        }
        
        System.out.println(sb);
    }
}

 

 

해결방법

  • 8진수의 각 자리에 대응되는 3비트짜리 2진수 문자열 배열을 만든다.
  • 입력받은 8진수 문자열을 앞자리부터 차례대로 2진수로 처리한다
    -> 이때 맨 첫번째 자리는 다른 자리와는 다르게 처리한다. 앞에 0이 붙지 않도록 숫자로 변경한 후 문자열로 다시 변경한다. 
  • 위의 과정을 통해 얻은 2진수 문자열을 모두 이어 붙여 출력한다. 

 


 

https://www.acmicpc.net/problem/1212