[백준] 디지털시계 (1942)(kotlin)

문제 설명

백준 1942번 문제 링크

입력 및 출력

» 입력

세 개의 입력이 주어진다. 첫째 줄부터 세 줄에 걸쳐 시작하는 시각과 끝나는 시각이 “hh:mm:ss”의 형태로 주어진다. 시작하는 시각과 끝나는 시각 사이에는 빈 칸이 하나 있어서, 한 줄마다 (빈 칸을 포함하여) 총 17글자가 입력으로 주어진다. 시작하는 시각과 끝나는 시각은 항상 다르다.

» 출력

첫째 줄부터 세 개의 줄에 걸쳐 입력된 구간에 포함되는 시계 정수들 중, 3의 배수인 것의 개수를 출력한다. 입력된 순서대로 각 줄에 한 개씩 차례로 출력하면 된다.

예제 입출력

입력 출력
00:59:58 01:01:24
22:47:03 01:03:24
00:00:09 00:03:37
29
2727
70

문제 풀이1

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

fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
    repeat(3) {
        val t = readLine().split(" ")
        val st = t[0].split(":").map { it.toInt() }.toMutableList()
        val et = t[1].split(":").map { it.toInt() }.toMutableList()
        var sti = timeCounter(st, false)
        var eti = timeCounter(et, false)
        var count = 0

        while (sti != eti) {
            if (sti % 3 == 0) {
                count++
            }
            sti = timeCounter(st, true)
        }

        count += if (eti % 3 == 0) 1 else 0
        println(count)
    }
}

fun timeCounter(tArr: MutableList<Int>, convert: Boolean): Int {
    if (convert) {
        tArr[2] += 1

        if (tArr[2] == 60) {
            tArr[2] = 0
            tArr[1] += 1
        }

        if (tArr[1] == 60) {
            tArr[1] = 0
            tArr[0] += 1
        }

        if (tArr[0] == 24) {
            tArr[0] = 0
        }
    }

    return tArr.map { time ->
        if (time / 10 < 1) "0$time" else "$time"
    }.joinToString("").toInt()
}