[작성일: 2023. 09. 17]
https://www.acmicpc.net/problem/2745
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String b = sc.next();
int num = sc.nextInt();
sc.close();
System.out.println(Integer.valueOf(b, num));
}
}
Integer.valueOf는 문자열을 Integer 객체로 변환하는 메서드이다.
Integer.valueOf(String s)를 넣으면 무조건 10진법으로 변환되지만, int radix에 지정된 진법을 넣으면 진법에 맞게 변환할 수 있다.
+ 2023. 09. 18 추가
백준 11005번 문제를 풀고 2745번 문제도 자바 라이브러리 없이 풀어보았다.
각 자릿수에 해당하는 값을 더한다. B진법의 수 n의 가장 오른쪽 자릿수부터 시작해서 10진법으로 변환 후 B로 나누어가면서 진행한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String n = sc.next();
int b = sc.nextInt();
int result = 0;
int power = 1; // 가중치(B의 제곱)
for (int i = n.length()-1; i >= 0; i--) {
char c = n.charAt(i);
if ('A' <= c && c <= 'Z') { // 대문자일 경우
result += (c - 'A' + 10) * power;
} else {
result += (c - '0') * power;
}
power *= b; // 다음 자리의 가중치를 계산
}
System.out.println(result);
}
}
B진법에서 각 자릿수는 B의 거듭제곱으로 표현된다.
1의 자리는 10⁰, 즉 1에 해당한다.
10의 자리는 10¹, 즉 10에 해당한다.
100의 자리는 10², 즉 100에 해당한다.
B진법에서는,
1의 자리는 B⁰, 즉 1에 해당한다.
B의 자리는 B¹, 즉 B에 해당한다.
B²의 자리는 B²에 해당한다.
가중치를 사용하는 이유는 각 자릿수의 숫자에 따라 결과 값에 얼마나 큰 영향을 미치는지 알기 위해서이다.
2진법에서 110이라는 숫자를 생각해보자. 이 숫자는 10진법으로 변환하면 6이 된다. 각 자리의 가중치를 사용해서 이 값을 얻을 수 있다.
맨 오른쪽 자리는 2⁰ x 0 = 0
중간 자리는 2¹ x 1 = 2
맨 왼쪽 자리는 2² x 1 = 4
이걸 전부 합하면 10진법 6이 된다. 따라서 코드에서 power 변수는 각 자릿수의 가중치를 나타내고 이것을 사용해서 최종 10진법을 계산한다.