https://www.acmicpc.net/problem/2745
2745번: 진법 변환
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
문제
알고리즘
문제에 풀기에 앞서 10진수가 B진법으로, B진법이 10진수로 어떻게 변환되는지 원리를 기억해야 한다.
내가 간단하게 정리하면 이렇게 표현할 수 있다.
그렇다면 우리가 알아야 할 것은 N의 길이와 B만 안다면 해결할 수 있다!
1. B진법으로 표현한 N과 몇 진법인지 표시한 B를 입력받는다.
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String N = st.nextToken();
int B = Integer.parseInt(st.nextToken());
2. N의 가장 끝부터 순차적으로 B^0, B^1 ... 을 곱해주기 시작한다. 이때, A ~ Z인 것은 아스키 코드를 사용하여 다시 숫자로 만들어준다.
int result = 0;
int tmp = 1;
for(int i=N.length()-1; i>=0 ;i--) {
char c = N.charAt(i);
int n;
if(c >= 'A' && c <= 'Z') {
n = c - 'A' + 10;
} else {
n = c - '0';
}
result += n*tmp;
tmp *= B;
}
풀이
import java.util.*;
import java.io.*;
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(), " ");
String N = st.nextToken();
int B = Integer.parseInt(st.nextToken());
int result = 0;
int tmp = 1;
for(int i=N.length()-1; i>=0 ;i--) {
char c = N.charAt(i);
int n;
if(c >= 'A' && c <= 'Z') {
n = c - 'A' + 10;
} else {
n = c - '0';
}
result += n*tmp;
tmp *= B;
}
br.close();
bw.write(Integer.toString(result));
bw.flush();
bw.close();
}
}
'Baekjoon' 카테고리의 다른 글
[백준] 1920번 수 찾기 (Java) (1) | 2024.02.27 |
---|---|
[백준] 9012번 괄호 (Java) (3) | 2024.02.27 |
[백준] 2563번 색종이 (Java) (0) | 2024.02.12 |
[백준] 1316번 그룹 단어 체커 (Java) (0) | 2024.02.02 |
[백준] 2941번 크로아티아 알파벳 (Java) (0) | 2024.01.31 |