[백준] 2745. 진법 변환

2025. 9. 2. 23:35CS&알고리즘/백준

https://www.acmicpc.net/problem/2745

 

36진법이란? 

10진법에서는 0 ~ 9까지만 한 자리로 표현하고,
36진법에서는 더 많은 숫자를 한 자리에 담기 위해 알파벳 대문자를 사용

  • 0 ~ 9 → 숫자 그대로 (0 ~ 9)
  • A ~ Z → 10 ~ 35
알파벳 숫자 알파벳 숫자 알파벳 숫자 알파벳 숫자 알파벳 숫자 알파벳 숫자
A 10 F 15 K 20 P 25 U 30 Z 35
B 11 G 16 L 21 Q 26 V 31    
C 12 H 17 M 22 R 27 W 32    
D 13 I 18 N 23 S 28 X 33    
E 14 J 19 O 24 T 29 Y 34    

 

문제 풀이

표에서 Z = 35, 

"ZZZZZ" = 

 

자리값 계산 방식

대부분 “첫 번째 자리”를 오른쪽(일의 자리)로 생각하는데 실제 코드는 왼쪽부터 차례대로 읽어도 문제가 없음! 

차이는 계산 순서일 뿐, 결과는 동일

 

코드에서는 ans = ans * B + digit 연산이 기존 숫자를 한 자리 밀어주는 역할을 합니다.

  • 첫 번째 자리(오른쪽 끝) = B의 0제곱
  • 두 번째 자리 = B의 1제곱
  • 세 번째 자리 = B의 2제곱

 

비교 예시 : 352 

방식 계산 순서 과정 결과
수학적 방식
(오른쪽부터)
일의 자리
→ 십의 자리
→ 백의 자리
300 + 50 + 2 = 352
코드 방식
(왼쪽부터)
왼쪽부터 누적  

 

 

제출 코드 

  • digit : 현재 문자가 나타내는 실제 숫자값 (0~35)
  • ans * B + digit : 기존 결과를 한 자리 올리고, 새로운 숫자를 더함
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        String N = st.nextToken().trim();
        int B = Integer.parseInt(st.nextToken());

        long ans = 0;
        for (int i = 0; i < N.length(); i++) {
            char ch = N.charAt(i);
            int digit;
            if ('0' <= ch && ch <= '9') {
                // 숫자 처리
                digit = ch - '0';
            } else {
                // 알파벳 처리
                digit = ch - 'A' + 10;
            }

            ans = ans * B + digit;
        }
        System.out.println(ans);
    }
}

 

다른 풀이 방식 

  • 자바 내장 메서드를 이용하여 풀이 
  • Integer.parseInt(N, B) : 문자열 NB진법으로 해석해 10진수 int로 변환
  • 단, 결과가 int 범위를 벗어나면 NumberFormatException 발생 → 필요시 Long.parseLong(N, B) 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        String N = st.nextToken();
        int B = Integer.parseInt(st.nextToken());

        // 내장 메서드로 진법 변환
        int ans = Integer.parseInt(N, B);
        System.out.println(ans);
    }
}

 

'CS&알고리즘 > 백준' 카테고리의 다른 글

[백준] 10870. 피보나치수 5  (0) 2025.10.10
[백준] 27433. 팩토리얼2  (0) 2025.10.10