진법 변환 문제는 코딩 테스트에서 자주 출제되는 기본 알고리즘 유형입니다.
이번 포스팅에서는 자바(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가 주어졌을 때, N을 B진법으로 바꾸는 문제입니다.
진법이 최대 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진수 |
'코딩테스트' 카테고리의 다른 글
[코딩 테스트 문제 풀이 시리즈] 11005번 - 진법 변환2: 진법 이해와 구현 (1) | 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 |