백준 문제풀이

2745. 진법 변환 (자바, Java)

뮤츠 2022. 11. 22. 22:30

이전 문제와 반대 문제.

원리가 똑같아서 딱히 어려울건 없다.

오히려 무식하게 곱해주면 되서 더 쉬움.

단, 이전에는 숫자->문자 변환이라 배열로 받았는데,

이번엔 문자->숫자 변환이라 맵으로 받았다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Map <Character, Integer> map = new HashMap<>(); // 문자 -> 숫자로 바꿀 HashMap
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		StringBuilder n = new StringBuilder(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
		int ans = 0; // 출력할 정답값.
		
		for (int i=0; i<=9; i++) {
			map.put((char)(i+48), i);
		} // 0~9까지는 그대로
		
		for (int i=10; i<=35; i++) {
			map.put((char)(i+55), i);
		} // 10~35는 알파벳 대문자
		
		n = n.reverse(); // 십진법에서 맨 뒤가 일의자리이듯, 뒤에서부터 순차계산해야한다.
		
		for (int i=0; i<n.length(); i++) {
			ans += Math.pow(b, i) * map.get(n.charAt(i));
		} // 반복문 통해서 계산 후 출력.		
		System.out.println(ans);
	}
}