반응형

문제를 읽어보면 이해하기 굉장히 어렵지만 단순하게 설명하면 A진법으로 표현된 수를 B진법으로 변환하는 문제이다.
백준 문제를 풀다보면 항상 문제를 이해하기 어렵게 설명해 놓는다… 해외 문제들을 번역해서 가져오는 경우가 많아서 그런가? 나도 나름 책도 열심히 읽는데… 문제만 보고는 이해가 안 돼서 구글링해서 문제 뜻을 이해하는 경우가 종종 발생한다…ㅋㅋㅋㅋ
여하튼 이 문제는 A진법의 수를 10진법으로 변환한 후 그 10진수를 B진법 수로 바꿔서 출력하면 해결할 수 있다.
사실 이 문제 굉장히 많이 틀렸는데… 4번을 틀리고 5번째서야 비로소 맞췄다.
그런데 나는 틀린 이유가 오버플로우를 처리 못 해서 계속 틀린 줄 알고 오버플로우를 어떻게 처리할지만 계속 고민했는데… 알고보니 0을 넣었을 때를 처리 안 해줘서 계속 아무 값이 출력이 안 돼서 틀린 거였다… 아니 이런 단순한 문제로 지금까지 고민했다고???
근데 그러면 오버플로우 처리는 안 해도 되는 건가? 문제는 맞추긴 했다만 조금 찝찝한 게, A=30, B=10을 입력하고 m=25를 넣고 30진법 수로 29를 25번 입력하면 이건 오버플로우가 발생할 텐데… 이거는 무시해도 되는 건가?? 모르겠네 내가 이해를 잘 못 한건가… 여하튼 문제는 맞았으니 됐다만…
import java.io.*;
import java.util.StringTokenizer;
public class BaseConversion_11576 {
public static int stoi(String str) {
return Integer.parseInt(str);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int A = stoi(st.nextToken()); // 미래 세계에서 사용하는 진법
int B = stoi(st.nextToken()); // 정이의 세계에서 사용하는 진법
int m = stoi(br.readLine()); // A진법 수의 총 자릿수
st = new StringTokenizer(br.readLine(), " ");
// A진법을 10진법으로 변경
long dec = 0; // 반환할 변환된 10진법 수
for (int i=0; i<m; i++) {
// m번을 반복하며 그 자릿수만큼 A의 거듭제곱을 해당 자릿수의 수에 곱해서 dec에 더한다
dec += stoi(st.nextToken()) * Math.pow(A, m-i-1);
}
String str = "";
if (dec == 0) str = "0"; // 0이 입력되었다면 출력도 0
// 10진법을 B진법으로 변경
while (dec > 0) {
str = Long.toString(dec%B) + " " + str;
dec /= B;
}
System.out.print(str);
br.close();
}
}
로그인
www.acmicpc.net
작성일자: 2023-09-17
'컴퓨터 공학 > 백준' 카테고리의 다른 글
[백준] JAVA 자바 : 2×n 타일링 2 (11726번) (0) | 2024.01.22 |
---|---|
[백준] JAVA 자바 : 2×n 타일링 (11726번) (1) | 2024.01.22 |
[백준] JAVA 자바 : 소인수분해 (11653번) (0) | 2024.01.22 |
[백준] JAVA 자바 : 진법 변환 (2745번) (0) | 2024.01.22 |
[백준] JAVA 자바 : 진법 변환 2 (11005번) (0) | 2024.01.22 |