728x90
[백준] 303 - 수학 1 (참고) : Base Conversion (11576번 JAVA)
[StringBuilder의 내장함수 reverse()를 사용한 방식]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
// 주어진 숫자의 자릿수
int m = Integer.parseInt(br.readLine());
// 수 입력 받기
int[] arr = new int[m];
st = new StringTokenizer(br.readLine());
for(int i=0; i<m; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
// A 진법 -> 10 진법
int num = 0;
for(int i=0; i<m; i++){
num += arr[i] * Math.pow(A, m-1-i);
}
StringBuilder sb = new StringBuilder();
while(num != 0){
sb.append(" " + num % B);
num = num / B;
}
bw.write(sb.reverse().toString() + "\n");
bw.flush();
bw.close();
}
}
[반례]
2자리 이상의 수는 reverse() 를 사용하는 과정에서, 일의 자리와 십의 자리가 바뀌어 출력되는 문제가 발생.
[Stack를 사용한 방식]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
// 주어진 숫자의 자릿수
int m = Integer.parseInt(br.readLine());
// 수 입력 받기
int[] arr = new int[m];
st = new StringTokenizer(br.readLine());
for(int i=0; i<m; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
// A 진법 -> 10 진법
int num = 0;
for(int i=0; i<m; i++){
num += arr[i] * Math.pow(A, m-1-i);
}
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
// 가장 작은 자리 수 순으로 stack에 push
while(num != 0){
stack.push(num % B);
num = num / B;
}
// 스택이 빌때 까지 pop()
while(!stack.isEmpty()){
sb.append(stack.pop() + " ");
}
bw.write(sb.toString() + "\n");
bw.flush();
bw.close();
}
}
728x90
'백준 > 코드 플러스 (알고리즘 기초 - 1)' 카테고리의 다른 글
[백준] 쉬운 계단 수 (!) (10844번 JAVA) / 400 - 다이나믹 프로그래밍 1 (0) | 2023.01.15 |
---|---|
[백준] 300 - 수학 1 : 숨바꼭질 6 (!) (17087번 JAVA) (0) | 2023.01.09 |
[백준] 300 - 수학 1 : 조합 0의 개수 (!) (2004번 JAVA) (0) | 2023.01.08 |
[백준] 300 - 수학 1 : 팩토리얼 0의 개수 (1676번 JAVA) (0) | 2023.01.07 |
[백준] 300 - 수학 1 : 골드바흐의 추측 (6588번 JAVA) (0) | 2023.01.07 |