백준
백준[2745]번 : 진법 변환 ( JAVA )
하루우울루
2023. 4. 8. 19:12
https://www.acmicpc.net/problem/2745
2745번: 진법 변환
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
Code
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HashMap<Character,Integer> map = new HashMap<>();
String arr = sc.next(); // n진법의 수
int n = sc.nextInt(); // n진법
if(n > 10) { // 10진법보다 큰 진법일 경우
for(int i=0;i<10;i++) {
map.put((char)(i+48),i); //문자에 해당하는 수를 매칭
}
for(int i=10;i<n;i++) {
map.put((char)(i+55),i);
}
}
else { // 10진법보다 작은 진법일 경우
for(int i=0;i<n;i++) {
map.put((char)(i+48),i);
}
}
int ans = 0;
for(int i=0;i<arr.length();i++) { // 계산
ans+=(Math.pow(n,i))*(map.get(arr.charAt(arr.length()-(i+1))));
}
System.out.println(ans); //출력
sc.close();
}
}
진법변환을 계산하는 방법대로 코드를 작성하면 된다.
map.put((char)(i+48), i);
이 부분을 보면 key값을 저장하는 부분에 문자로 바꾸어 저장하도록 했다.
(i+48)이 부분은 아스키코드를 보면 이해할 수 있다.
ans+=(Math.pow(n, i))*(map.get(arr.charAt(arr.length()-(i+1))));
이 부분은 Math.pow를 사용해서 제곱승을 계산하였다.
풀이방법은 손풀이하는 방법과 그대로 코드를 작성해서 문제는 없었고,
map에 key값을 넣을 때 문자로 넣어야 한다는 것에 주의해서 쉽게 풀 수 있었다.