BOJ

[백준 2745번/JAVA] 진법 변환

syj0522 2024. 3. 14. 21:53

문제

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();
    }
}