[백준] 16진수 (1550)(kotlin)

원본 문제

문제 설명

16진수 수를 입력받아서 10진수로 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 또, 이 수는 음이 아닌 정수이다.

출력

첫째 줄에 입력으로 주어진 16진수 수를 10진수로 변환해 출력한다.

테스트 케이스

입력 출력
A 10
13F 319

문제 풀이1

import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.pow

fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
    val hex = readLine().map { hexToDec(it) }
    var length = hex.size
    println(hex.fold(0) {total, hex ->
        length--
        total + (hex * 16.0.pow(length)).toInt()
    })
}

fun hexToDec(hex: Char): Int {
    return when (hex) {
        'A' -> 10
        'B' -> 11
        'C' -> 12
        'D' -> 13
        'E' -> 14
        'F' -> 15
        else -> hex.toInt() - 48
    }
}

문제 풀이2

import java.io.BufferedReader
import java.io.InputStreamReader

fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
    println(readLine()!!.toInt(16))
}