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

jinvicky·2024년 4월 12일
0

Algorithm - Java

목록 보기
24/63

진법 변환을 한다는 것은 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
Front-End와 Back-End 경험, 지식을 공유합니다.

0개의 댓글