[백준] 2745번 진법 변환 Java 문제 풀이

2023. 4. 6. 18:02알고리즘/백준

728x90
반응형

문제풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

interface Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        String[] input = br.readLine().split(" ");
        String S = input[0];
        int B = Integer.parseInt(input[1]);
        int result = 0;
        int len = S.length();
        for(int i=0; i<len; i++) {
            int val = S.charAt(len-i-1)-55;
            if(val < 10) {
                val = val + 7;
            }
            result += val * Math.pow(B, i);
        }
        System.out.println(result);
    }
}

B 진법의 수를 10진법으로 바꾸려면 다음과 같이 해야 합니다.

 

36진수 ZZZZZ에서 Z는 35에 해당하므로

$35\times 36^4 + 35\times 36^3 + 35\times 36^2 + 35\times 36^1 + 35\times 36^0$

이 됩니다.

 

이거를 코드화해봤습니다.

 

숫자 앞자리부터 변환해서 넣으려고 S.charAt(len-i-1)이라 썼습니다.

 

아스키코드에서 A가 65이므로 A부터 Z까지 55를 빼주면 10부터 35가 됩니다.

 

10 미만의 자연수는 48을 빼줘야 1부터 9가 되므로 55는 이미 빼줬으니 7만 더해줍니다.

 

그리고 그 값에다가 B의 i 제곱을 곱한 값을 모두 더하면 10진법으로 변환한 수가 됩니다.

 

 

출처 : https://www.acmicpc.net/problem/2745

 

2745번: 진법 변환

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 

www.acmicpc.net

 

728x90
반응형