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진수로 변환할 수 있다.