[백준] 11576. Base Conversion
문제 링크
풀이 과정
A 진수를 10진수로 변환한 후, 그 값을 다시 B 진수로 변환하는 문제입니다. stack과 queue 의 기능을 동시에 사용하기 위해 Deque 자료구조를 사용했습니다.
로직은 다음과 같습니다.
- 먼저 A 진법으로 표현된 숫자의 자리수 개수 m 만큼의 숫자를 입력받아 덱에 저장(
add
)합니다. - 숫자의 맨 앞자리부터 꺼내어(
poll
), 가중치를 곱해 변수 sum 에 누적시킵니다. 이 작업으로 A 진법으로 표현된 숫자는 10진수로 변환됩니다. - 10진수로 변환된 숫자를 B 로 나누며 B 진법으로 변환합니다. 나머지 값을 덱에 저장(
push
) 합니다. - 다 변환되었으면, 덱의 top 부터 하나씩 꺼내(
pop
) 문자열을 이어붙입니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
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());
Deque<Integer> deque = new ArrayDeque<>();
StringBuilder answer = new StringBuilder();
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(br.readLine());
int sum = 0;
st = new StringTokenizer(br.readLine());
for (int i = 0; i < m; i++) deque.add(Integer.parseInt(st.nextToken()));
while (!deque.isEmpty()) {
int size = deque.size();
int num = deque.poll();
sum += (int) Math.pow(A, size - 1) * num;
}
while (sum != 0) {
deque.push(sum % B);
sum /= B;
}
while (!deque.isEmpty()) answer.append(deque.pop() + " ");
System.out.println(answer);
}
}
댓글남기기