공부 일지/문제풀이
진법변환
Joshbla
2023. 4. 2. 21:37
문제
https://www.acmicpc.net/problem/2745
2745번: 진법 변환
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
풀이
Java
import java.util.Scanner;
public class 진법변환_2745 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] NB = sc.nextLine().split(" ");
String N = NB[0];
Integer B = Integer.parseInt(NB[1]);
int sum = 0;
for (int i = 0; i < N.length(); i++) {
char c = N.charAt(i);
sum *= B;
if (c >= 'A') {
sum += (c - '7');
} else {
sum += (c - '0');
}
}
System.out.println(sum);
}
}
Kotlin
fun main() {
var (n, b) = readln().split(" ")
var sum = 0
for (i in n.indices) {
var c = n[i]
sum *= b.toInt()
if (c.isDigit()) {
sum += c - '0'
} else {
sum += c - '7'
}
}
println(sum)
}
What's new ?
- 입력받을 때 var (a, b) = readln.split() 으로 바로 두개의 변수를 선언할 수 있다.
- isDigit() 메서드는 자바에서도 있었던 메서드인데 모르고 있었다. 해당 character가 숫자인지 확인하는 함수이다.
사실 이 문제는 메서드 한줄로 끝낼 수 있다.
// Java
System.out.println(Integer.parseInt(N, B));
// Kotlin
println(n.toInt(b.toInt()))
자바에선 Integer.parseInt(A,B) 메서드
코틀린에선 A.toBigInteger(B) 메서드를사용하면 문자열A를 B진수로 변환할 수 있다.