본문 바로가기

알고리즘/문제 풀이

[코드 트리] 진법 변환 3 java

1. 문제 설명

문제링크

8진수 -> 2진수

2. 접근 방식

8진수 → 2진수로 변환하는 방법은 다음과 같다.

ⓐ 8진수 각 자리를 떼어낸다.
ⓑ 각 자릿수를 2진수로 바꾼다. (한자리는 0~8 사이의 수임으로 2진수로 바꿀 시, 2진수는 무조건 3자리 이하임)
ⓒ 2진수로 바꾼 수를 이어 붙인다. (이때, 모든 2진수는 3자리를 차지해야한다. 아니면 전혀 상관 없는 이상한 수가 된다.)

3. 코드 분석

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        StringBuilder sb = new StringBuilder();


        for(int i = 0; i < s.length(); i++){
            if(i==0){
                sb.append(Integer.toBinaryString(Character.getNumericValue(s.charAt(i))));
            }else {
                int temp = Character.getNumericValue(s.charAt(i));

                if(temp <= 1){
                    sb.append(0).append(0).append(Integer.toBinaryString(temp));
                }else if(temp < 4){
                    sb.append(0).append(Integer.toBinaryString(temp));
                }else {
                    sb.append(Integer.toBinaryString(temp));
                }
            }
        }
        System.out.println(sb);
    }
}

Character.getNumericValue(char value): char → int (자릿수 하나씩 떼어내서 생각하기용)

Integer.toBinaryString(int value): int → 2진수로 표현된 String 값

만약 2진수로 변환했을 때, 자릿수가 3개가 안되면 3개가 되도록 앞에 0을 추가로 넣었다. 다만 맨 앞 자리수는 0을 넣으면 안되므로 제외했다.

4. 성장 하기

10진수를 다양한 진법으로 변환 시켜주는 java의 함수들을 알아보자.

// 10 -> 2 
Integer.toBinaryString(a);
Integer.toString(a,2); // 2번째 인자로 바꾸려는 진법을 숫자로 명시해주면 된다. 

// 10 -> 8
Integer.toOctalString(a);
Integer.toString(a,8);

// 10 -> 16
Integer.toHexString(a);
Integer.toString(a,16);