코딩테스트

[코딩 테스트 문제 풀이 시리즈] 11005번 - 진법 변환2: 진법 이해와 구현

dev-nadan 2025. 7. 31. 17:10

문제 개요

오늘은 백준 11005번 “진법 변환2” 문제를 풀어보았다.

 

10진법 수 N을 B진법으로 바꾸는 것이 목표이며, B는 2부터 36 사이의 정수다.

진법이 10을 넘는 경우 숫자가 아닌 문자로 표현하게 되는데, 예를 들어 10은 ‘A’, 11은 ‘B’ … 35는 ‘Z’로 출력해야 한다.

 

예를 들어, 60466175를 36진수로 바꾸면 ZZZZZ가 된다.


문제 조건 요약

  • 입력: 10진법 수 N과 변환할 진법 B (2 ≤ B ≤ 36)
  • 출력: N을 B진법으로 변환한 결과
  • 시간복잡도: O(log₍B₎N)

접근 방식

진법 변환의 핵심은 나머지 연산과 몫 나누기의 반복이다.

 

  1. N을 B로 나눈 나머지를 구해 해당 자릿수를 결정한다.
  2. 그 나머지가 10 이상이면 ‘A’, ‘B’처럼 문자로 바꿔준다.
  3. N을 B로 나눈 몫으로 갱신하고, N이 0이 될 때까지 반복한다.
  4. 마지막 나머지부터 앞자리에 해당하므로, 구한 문자를 역순으로 출력한다.

구현 코드 (Java)

import java.util.Scanner;

public class _11005_ {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();  // 10진수 입력
        int B = sc.nextInt();  // 변환할 진법

        StringBuilder sb = new StringBuilder();

        while (N > 0) {
            int remainder = N % B;
            if (remainder < 10) {
                sb.append(remainder);  // 숫자는 그대로
            } else {
                sb.append((char) (remainder - 10 + 'A'));  // 알파벳 변환
            }
            N /= B;
        }

        System.out.println(sb.reverse());  // 역순 출력
    }
}

포인트 정리

  • remainder < 10일 땐 숫자 그대로, 아니면 알파벳으로 치환
  • (char)(remainder - 10 + 'A') 표현이 중요
  • StringBuilder.reverse()를 통해 순서를 바꿔줌

마무리

이번 문제를 통해 진법 변환의 기본 로직과 함께, 알파벳으로 자릿수를 표현하는 방식을 익힐 수 있었다. 단순한 나머지 연산 반복으로 진법을 구현할 수 있으며, 36진법까지도 어렵지 않게 구현 가능하다는 점에서 좋은 연습이 되는 문제였다.