728x90
🔗 문제 링크
https://www.acmicpc.net/problem/11576
📌 문제 개요
백준 11576번은 A진법으로 표현된 수를 B진법으로 변환하는 문제입니다.
입력은 일반적인 문자열 형태가 아니라, 각 자릿수가 공백으로 구분되어 주어진다는 점이 특징
즉, 문제의 핵심은 다음 두 단계입니다.
- A진법 수를 10진수로 바꾸기
- 10진수를 다시 B진법으로 바꾸기
진법 변환의 기본 원리를 알고 있으면 어렵지 않게 해결할 수 있는 문제
📌 접근 방법
이 문제는 한 번에 A진법에서 B진법으로 바로 바꾸려고 하기보다,
중간에 10진법으로 변환해서 처리하는 것이 가장 깔끔
1. A진법 → 10진법
A진법 수가 자릿수 배열로 주어지므로, 왼쪽부터 하나씩 읽으면서 누적 계산
예를 들어 8진수 1 0 1 이라면:
- 0 * 8 + 1 = 1
- 1 * 8 + 0 = 8
- 8 * 8 + 1 = 65
즉, 다음 식으로 처리
decimal = decimal * A + digit;
2. 10진법 → B진법
10진수를 B진법으로 바꿀 때는 나머지 연산을 사용
- decimal % B → 현재 자리값
- decimal /= B → 다음 계산 진행
이 과정을 반복하면 낮은 자리부터 구해지므로, 배열이나 리스트에 저장한 뒤 역순으로 출력
📌 핵심 아이디어
1) 누적 계산으로 10진수 만들기
자릿수를 하나씩 보면서
decimal = decimal * A + digit;
형태로 계산하면 A진법 수를 쉽게 10진수로 바꿀 수 있습니다.
2) 나머지는 역순으로 쌓인다
B진법으로 바꾸는 과정에서 나오는 나머지는
항상 맨 뒤 자리부터 나오기 때문에, 그대로 출력하면 순서가 반대가 됩니다.
따라서:
- 리스트에 저장한 뒤
- 뒤에서부터 출력
📌 전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
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());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(br.readLine());
StringTokenizer st2 = new StringTokenizer(br.readLine());
int decimal = 0;
for (int i = 0; i < m; i++) {
int digit = Integer.parseInt(st2.nextToken());
decimal = decimal * A + digit;
}
ArrayList<Integer> result = new ArrayList<>();
while (decimal > 0) {
result.add(decimal % B);
decimal /= B;
}
for (int i = result.size() - 1; i >= 0; i--) {
System.out.print(result.get(i) + " ");
}
}
}
📄 정리
백준 11576번은 전형적인 진법 변환 문제입니다.
핵심은 A진법 → 10진법 → B진법 순서로 변환하는 것입니다.
정리하면:
- A진법 수는 value * A + digit 방식으로 10진수 변환
- 10진수는 % B, /= B 방식으로 B진법 변환
- 나머지는 역순으로 쌓이므로 뒤집어서 출력
진법 변환 기본기를 연습하기 좋은 문제였고,
입력이 자릿수 배열 형태라는 점만 주의하면 쉽게 풀 수 있습니다.
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 백준 2628 종이자르기 JAVA 풀이 (구현, 정렬, 시간복잡도) (0) | 2026.04.13 |
|---|---|
| 백준 10431 줄세우기 JAVA 풀이 (구현, 정렬, 시간복잡도) (0) | 2026.04.12 |
| 백준 15688 수 정렬하기 5 JAVA 풀이 (정렬, 시간복잡도) (0) | 2026.04.09 |
| 백준 13301 타일 장식물 JAVA 풀이 (피보나치, DP) (0) | 2026.04.08 |
| 백준 1769 3의 배수 JAVA 풀이 (문자열, 구현, 수학) (0) | 2026.04.07 |