문제 개요
오늘은 백준 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)
접근 방식
진법 변환의 핵심은 나머지 연산과 몫 나누기의 반복이다.
- N을 B로 나눈 나머지를 구해 해당 자릿수를 결정한다.
- 그 나머지가 10 이상이면 ‘A’, ‘B’처럼 문자로 바꿔준다.
- N을 B로 나눈 몫으로 갱신하고, N이 0이 될 때까지 반복한다.
- 마지막 나머지부터 앞자리에 해당하므로, 구한 문자를 역순으로 출력한다.
구현 코드 (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진법까지도 어렵지 않게 구현 가능하다는 점에서 좋은 연습이 되는 문제였다.
'코딩테스트' 카테고리의 다른 글
[코딩 테스트 문제풀이 시리즈] 진법 변환 총정리 - 2진수, N진수, 역변환까지! (3) | 2025.07.31 |
---|---|
[코딩 테스트 문제 풀이 시리즈] 10448번 - 유레카 이론: 삼각수 완전 탐색 (4) | 2025.07.30 |
[코딩 테스트 문제 풀이 시리즈] 배열 기초 + 투 포인터 개념 정복 (백준 10807, 10871, 3273) (2) | 2025.07.29 |
[코딩 테스트 문제 풀이 시리즈] 10989번 - 수 정렬하기3: 카운팅 정렬과 입력 최적화 (4) | 2025.07.28 |
[코딩 테스트 문제 풀이 시리즈] 10431번 - 줄세우기: 직접 구현부터 삽입 정렬 개념까지 (2) | 2025.07.27 |