[백준] 트럭 주차 (2979)(kotlin)

문제 설명

백준 2979번 문제 링크

입력 및 출력

» 입력

  • 첫째 줄에 문제에서 설명한 주차 요금 A, B, C가 주어진다. (1 ≤ C ≤ B ≤ A ≤ 100) 다음 세 개 줄에는 두 정수가 주어진다. 이 정수는 상근이가 가지고 있는 트럭이 주차장에 도착한 시간과 주차장에서 떠난 시간이다. 도착한 시간은 항상 떠난 시간보다 앞선다. 입력으로 주어지는 시간은 1과 100사이 이다.

» 출력

첫째 줄에 상근이가 내야하는 주차 요금을 출력한다.

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

입력 출력
5 3 1
1 6
3 5
2 8
33

문제 풀이1

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val (A, B, C) = readLine().split(" ").map { it.toInt() }
    var time = IntArray(101) { 0 }

    repeat(3) {
        val (S, E) = readLine().split(" ").map { it.toInt() }
        for (i in S until E) time[i]++
    }

    println(
        time.fold(0) { acc, next ->
            acc + when (next) {
                1 -> 1 * A
                2 -> 2 * B
                3 -> 3 * C
                else -> 0
            }
        }
    )
}

문제 풀이2

var max = 0
var min = 0

fun main(args: Array<String>) = with(System.`in`.bufferedReader()){
    val (A, B, C) = readLine().split(" ").map { it.toInt() }
    val car1 = parkingTime(readLine()!!)
    val car2 = parkingTime(readLine()!!)
    val car3 = parkingTime(readLine()!!)

    var sum = 0

    for (i in min..max) {
        var count = 0
        if (i in car1) count++
        if (i in car2) count++
        if (i in car3) count++

        sum += when (count) {
            1 -> 1 * A
            2 -> 2 * B
            3 -> 3 * C
            else -> 0
        }
    }

    println(sum)
}

fun parkingTime(str: String): IntRange =
    str.split(" ")
    .map { it.toInt() }
    .let {
        if (it[0] < min) min = it[0]
        if (it[1] > max) max = it[1]
        it[0] until it[1]
    }