[백준] 트럭 주차 (2979)(kotlin)
문제 설명
입력 및 출력
» 입력
- 첫째 줄에 문제에서 설명한 주차 요금 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]
}