코딩테스트

[코딩 테스트 문제풀이 시리즈] 진법 변환 총정리 - 2진수, N진수, 역변환까지!

dev-nadan 2025. 7. 31. 18:15

진법 변환 문제는 코딩 테스트에서 자주 출제되는 기본 알고리즘 유형입니다.

이번 포스팅에서는 자바(Java)로 풀 수 있는 세 가지 진법 변환 문제를 단계적으로 정리해보았습니다.

 


1. 10진수를 2진수로 변환하기

백준 10829 - 이진수 변환

문제 설명

주어진 10진수 N을 2진수로 바꿔 출력하는 문제입니다.

입력으로는 long 범위의 수가 들어오므로 Scanner.nextLong()으로 받아야 하며,

자릿수마다 % 2를 사용해 나머지를 구하고, 가장 뒤의 자리부터 채워야 하므로 StringBuilder.reverse()가 필요합니다.

 

자바 코드

Scanner sc = new Scanner(System.in);
long N = sc.nextLong();
StringBuilder sb = new StringBuilder();

if (N == 0) {
    System.out.println(0);
    return;
}

while (N > 0) {
    sb.append(N % 2);
    N /= 2;
}
System.out.println(sb.reverse());

 


2. 10진수를 N진수로 변환하기

 

백준 11005 - 진법 변환 2

문제 설명

10진수 수 N과 진법 B가 주어졌을 때, NB진법으로 바꾸는 문제입니다.

진법이 최대 36까지 주어질 수 있어 숫자(0~9)뿐만 아니라 알파벳(A~Z) 변환도 처리해야 합니다.

핵심 로직

  • 나머지가 10 미만 → 그대로 append
  • 나머지가 10 이상 → 'A' + (나머지 - 10) 으로 문자 변환

자바 코드

Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
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());

3. N진수를 10진수로 역변환하기

백준 2745 - 진법 변환

문제 설명

문자열로 주어진 B진법 수 N을 10진수로 변환하는 문제입니다.

왼쪽에서부터 순차적으로 한 자리씩 읽어오면서, 기존 값에 B를 곱하고 현재 자리값을 더해줍니다.

문자 → 숫자 변환 방법

  • '0' ~ '9'ch - '0'
  • 'A' ~ 'Z'ch - 'A' + 10

자바 코드

Scanner sc = new Scanner(System.in);
String N = sc.next();
int B = sc.nextInt();
int result = 0;

for (int i = 0; i < N.length(); i++) {
    char ch = N.charAt(i);
    int value;

    if (ch >= '0' && ch <= '9') {
        value = ch - '0';
    } else {
        value = ch - 'A' + 10;
    }

    result = result * B + value;
}
System.out.println(result);

 

예시 설명:  "ZZZZZ" 36

루프 ch value 누적 계산식 result
1 Z 35 0 * 36 + 35 35
2 Z 35 35 * 36 + 35 = 1295 1295
3 Z 35 1295 * 36 + 35 = 46655 46655
4 Z 35 46655 * 36 + 35 = 1675795 1675795
5 Z 35 1675795 * 36 + 35 = 60466175 출력

마무리 

유형문제 번호변환 방향

유형 문제 번호 변환 방향
2진수 변환 10829 10진수 → 2진수
N진수 변환 11005 10진수 → N진수
N진수 → 10진수 변환 2745 N진수 → 10진수