[백준] 막대기 (1094)(kotlin)

문제 설명

백준 1094번 문제 링크

입력 및 출력

» 입력

첫째 줄에 X가 주어진다. X는 64보다 작거나 같은 자연수이다.

» 출력

문제의 과정을 거친다면, 몇 개의 막대를 풀로 붙여서 Xcm를 만들 수 있는지 출력한다.

예제 입출력(테스트케이스)

입력 출력
23 4
32 1
64 1
48 2

문제 풀이1

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    var x = readLine().toInt()
    val arr = intArrayOf(64, 32, 16, 8, 4, 2, 1)
    var count = 0

    arr.forEach {
        if (x >= it) {
            x -= it
            count++
        }
    }

    println(count)
}

문제 풀이2

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val x = readLine().toInt()
    println(
//      example x == 23
//      23.toString(2) -> "10111"
//      "10111".count { it == '1' } -> 4
        x.toString(2).count { it == '1' }
    )
}