문제
B진법 수 N을 10진법으로 바꿔 출력하는 문제이다.
B진법이 만약 10진법을 넘어간다면 A:10, B:11, ..., Z:35로 표현한다.
풀이
문제를 이해하지 못해서 여러 번 읽다가 풀이를 찾아봤다.
'ZZZZZ 36'을 입력받은 경우 :
36진법수로 표현한 ZZZZZ을 10진법으로 바꾼 결과를 출력해야한다.
(35 * 36^4) + (35 * 36^3) + (35 * 36^2) + (35 * 36^1) + (35 * 36^0) = 60466175
'ABCD K'을 입력받은 경우 :
K진법수로 표현한 ABCD를 10진법으로 바꾼 결과를 출력해야한다.
(10 * K^3) + (11 * K^2) + (12 * K^1) + (13 * K^0)
코드
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;
st = new StringTokenizer(br.readLine());
String str = st.nextToken(); //N(문자열) 입력받기
int B = Integer.parseInt(st.nextToken()); //B(진법) 입력받기
int result = 0; //결과 저장 변수
int n = 1; //B를 제곱할 변수 (B^0=1이므로 초기값 1)
for(int i=str.length()-1; i>=0; i--) { //B^0 즉 가장 오른쪽 문자부터 실행
int c = str.charAt(i);
if(c >= 65 && c <= 90) { //c가 A와 Z 사이면 (A=65)
result += (c - 55)*n;
}else { //c가 1에서 9 사이면 (0=48)
result += (c - 48)*n;
}
n *= B; //제곱수 늘리기
}
bw.write(result+" ");
bw.close();
}
}
'BOJ' 카테고리의 다른 글
[백준 2903/JAVA] 중앙 이동 알고리즘 (0) | 2024.03.17 |
---|---|
[백준 2720번/JAVA] 세탁소 사장 동혁 (0) | 2024.03.17 |
[백준 2563번/JAVA] 색종이 | 이차원 배열 (0) | 2024.03.14 |
[백준 2566번/JAVA] 최댓값 | 이차원 배열 (3) | 2024.03.14 |
[백준 10798/JAVA] 세로읽기 (0) | 2024.03.14 |