[백준] 경고 (3029)(kotlin)

문제 설명

백준 3029번 문제 링크

입력 및 출력

» 입력

  • 첫째 줄에 현재 시간이 hh:mm:ss 형식으로 주어진다. (시, 분, 초) hh는 0보다 크거나 같고, 23보다 작거나 같으며, 분과 초는 0보다 크거나 같고, 59보다 작거나 같다. 둘째 줄에는 나트륨을 던질 시간이 위와 같은 형식으로 주어진다.

» 출력

첫째 줄에 정인이가 기다려야 하는 시간을 입력과 같은 형식으로 출력한다.

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

입력 출력
20:00:00
04:00:00
08:00:00

문제 풀이1

import java.io.BufferedReader
import java.io.InputStreamReader
import java.time.Duration
import java.time.LocalDateTime
import kotlin.math.absoluteValue

fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
    var current = readLine()
    var target = readLine()

    var later: LocalDateTime
    var earlier: LocalDateTime

    if (current < target) {
        later = current.split(":").map { it.toInt() }.let {
            LocalDateTime.of(2000, 1, 1, it[0].toInt(), it[1].toInt(), it[2].toInt())
        }
        earlier = target.split(":").map { it.toInt() }.let {
            LocalDateTime.of(2000, 1, 1, it[0].toInt(), it[1].toInt(), it[2].toInt())
        }
    } else {
        later = target.split(":").map { it.toInt() }.let {
            LocalDateTime.of(2000, 1, 2, it[0].toInt(), it[1].toInt(), it[2].toInt())
        }
        earlier = current.split(":").map { it.toInt() }.let {
            LocalDateTime.of(2000, 1, 1, it[0].toInt(), it[1].toInt(), it[2].toInt())
        }
    }

    val duration = Duration.between(later, earlier).seconds.absoluteValue
    println(
        "%02d:%02d:%02d"
            .format(
                duration / 3600,
                (duration % 3600) / 60,
                duration % 60
            )
    )
}