[백준, 자바] 11005번 - 진법 변환2

jinvicky·2024년 4월 12일
0

ALG

목록 보기
24/62

진법 변환을 한다는 것은 2진법은 2로, 8진법은 8로 지정된 숫자를 계속 나눈다는 것이다.

정답

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] inputArray = br.readLine().split(" ");
        int N = Integer.parseInt(inputArray[0]);
        int B = Integer.parseInt(inputArray[1]);

        StringBuilder sb = new StringBuilder();
        
        while(N > 0) {
            if (N % B < 10) {
                sb.append((char) (N % B + '0'));
            }
            else{
                sb.append((char) (N % B - 10 + 'A'));
            }
            N /= B;
        }

        System.out.println(sb.reverse().toString());

    }
}

N과 B를 입력받아서 N을 B로 나누는 과정을 N이 0보다 클 때까지 반복한다.

결과
한 3번 틀리고 답 보고 이해했다.

맨 처음에 했던 생각은 36개 길이의 배열을 만들어서 초기화를 한 다음에 B랑 매칭되는 배열값을 StringBuilder에 추가하면 되지 않을까였다.

//        while(N > 0) {
//            sb.append(arr[B - 1]);
//            N /= B;
//        }
while(N > 0) {
            if (N % B < 10) {
                sb.append(arr[N - 1]);
            }
            else{
                sb.append(arr[N - 1]);
            }
            N /= B;
        }

둘 다 당연히 안된다.

일단 N / B가 36보다 크면 index 범위 예외 발생하고,
애초에 B진법이라고 해서 항상 B가 나올까? 도 아니지.
2진법은 2가 항상 나와서가 아니라 0과 1, 2개로 표현가능해서 2진법이니까.

결국 N % B한 값에 char 형변환을 써서 '0' 또는 'A' 더해서 처리하는 것이다.

결과적으로 배열도 필요없고 그냥
StringBuilder를 reverse()하거나 list를 뒤에서부터 출력하면 된다. (2진법하듯이 2로 계속 나누어 계산해보면 결과값이 반대로 나오거든)

profile
일단 쓰고 본다

0개의 댓글