https://www.acmicpc.net/problem/11576
package baekjoon;
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
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 N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
int decimal = 0;
for (int i = N; i > 0; i--) {
int input = Integer.parseInt(st.nextToken());
decimal += (input * Math.pow(A, i - 1));
}
List<Integer> list = new ArrayList<>();
while (decimal != 0) {
list.add(decimal % B);
decimal /= B;
}
StringBuilder sb = new StringBuilder();
for (int i = list.size() - 1; i >= 0; i--) {
sb.append(list.get(i)).append(" ");
}
System.out.println(sb);
}
}
개인적으로 문제 설명이 빈약하다고 생각한다.
입력과 출력이 아래와 같이 되어있는데 헷갈릴 여지가 존재한다. 세번쨰 입력으로 들어오는 수 2
와 16
은 독립적인 숫자가 아닌 17진수의 첫번째 자리와 두번째 자리를 의미한다.
출력 답 역시 17진수의 2 16
을 8진수로 변환한 6 2
를 의미한다.
```
//입력
17 8
2
2 16
//출력
6 2
```
문제에서 "입력의 두 번째 줄에는 A진법으로 나타낸 숫자의 자리수의 개수 m(1 ≤ m ≤ 25)이 주어진다."
이 부분을 잘 캐치해야 2
와 16
이 독립적인 숫자가 아니라는 것을 빠르게 캐치할 수 있을 것 같다.
결론적으로는 A
진수로 들어온 숫자에 대해서 B
진수로 변환하여 출력하는 문제이다.
A진수
-> 10진수
-> B진수
두번의 변화를 거쳐야 한다.A진수
를 10진수로 변환하는 과정은 아래의 식을 이해하면 쉽다.2(17)^1 +16(17)^0 =34+16=50
=>decimal += (input * Math.pow(A, i - 1));
B진수
로 변환해주어야 한다. 위 10진수에서 B로 나눈 나머지를 구한 후 다시 B로 나누는 과정을 반복하면 된다.decimal += input * A^(i-1)
이 수식을 기억하고 있어야 한다.Integer.toString
을 활용해서 10 -> B진법
변환을 하려고 했는데 답과 몇개의 테케가 맞았음에도 틀렸습니다.
가 떴다. 이 이유는 아직도 잘 모르겠다.