백준 11005번 — 진법 변환 2 (Java)

이승욱·2026년 3월 17일

자바알고리즘

목록 보기
13/33

문제 설명

10진법 정수 N이 주어졌을 때, 이를 B진법으로 변환하여 출력하는 문제이다.

단, 10 이상의 값은 다음과 같이 알파벳 대문자를 사용한다.

10 → A
11 → B
...
35 → Z

입력

첫째 줄에 두 정수

N B

가 주어진다.

조건

2 ≤ B ≤ 36
N ≤ 1,000,000,000

출력

10진법 정수 NB진법으로 변환한 값을 출력한다.


입력 예시

60466175 36

출력 예시

ZZZZZ

문제 해결 아이디어

진법 변환의 기본 원리는 다음과 같다.

N을 B로 계속 나누면서 나머지를 구한다.

예를 들어

N % B → 현재 자리
N /= B → 다음 계산

이 과정을 반복하면 각 자리의 값이 구해진다.

단, 이 값들은

뒤에서부터 (거꾸로)

구해지기 때문에 마지막에 뒤집어야 한다.


내가 작성한 풀이

나는 결과를 char 배열에 저장한 뒤
마지막에 거꾸로 출력하는 방식으로 구현했다.

코드

import java.util.*;

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

        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        int B = sc.nextInt();

        char[] result = new char[30];
        Arrays.fill(result,' ');

        int i = 0;

        while(N > 0) {

            if(N % B == 0) {

                result[i] = '0';
                i++;
                N /= B;

            } else {

                int tmp = N % B;

                if(tmp > 9) {
                    result[i] = (char) ('A' + tmp - 10);
                } else {
                    result[i] = (char) (tmp + '0');
                }

                i++;
                N -= tmp;
                N /= B;
            }
        }

        for(int j = 29; j >= 0; j--) {
            if(result[j] != ' ')
                System.out.print(result[j]);
        }
    }
}

이 방식은

배열에 거꾸로 저장 → 뒤에서부터 출력

하는 구조이다.


강의 풀이

강의에서는 문자열을 사용해서 더 간단하게 구현했다.

코드

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        int B = sc.nextInt();

        String ans = "";

        while (N > 0) {

            int digit = N % B;

            if (digit < 10) ans += digit;
            else ans += (char)('A' + digit - 10);

            N /= B;
        }

        System.out.println(new StringBuilder(ans).reverse());
    }
}

두 풀이 방식 비교

방식특징
내 풀이배열 사용, 직접 뒤집어서 출력
강의 풀이문자열 + reverse 사용

두 방식 모두 핵심 아이디어는 같다.

나머지를 이용해 자리값을 구하고
거꾸로 뒤집는다

핵심 개념

1. 진법 변환 공식

자리값 = N % B
N = N / B

이 과정을 반복하면 모든 자릿수를 구할 수 있다.


2. 알파벳 변환

10 이상일 때

(char)('A' +- 10)

10 → A
11 → B

3. 결과는 거꾸로 나온다

나머지는 항상

가장 낮은 자리부터

구해지기 때문에 마지막에 뒤집어야 한다.


시간 복잡도

NB로 계속 나누기 때문에

O(log N)

이다.

최대 N ≤ 10억이므로 매우 빠르게 수행된다.


정리

이 문제는 기본적인 진법 변환 문제로,
핵심은 나머지를 이용해 각 자릿수를 구하는 것이다.

처음에는 배열을 사용해 직접 뒤집는 방식으로 구현했지만,
강의에서는 문자열과 reverse()를 활용해 더 간단하게 해결했다.

즉,

나머지 계산 → 문자열 저장 → 뒤집기

가 가장 일반적인 진법 변환 패턴이다.

profile
아는거 없는 전공자

0개의 댓글