알고리즘/백준

[백준] 2884번 : 알람 시계 - 코틀린(kotlin)

Junuuu 2022. 10. 30. 00:01
반응형

https://www.acmicpc.net/problem/2884

 

2884번: 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,

www.acmicpc.net

 

문제 해석

H, M을 공백으로 구분하여 입력받고 이 시간에서 45분을 뺀 시간을 출력해야 합니다.

 

문제 풀이 전 설계

시간에 대한 음수관리를 잘해주기만 하면 될 것 같습니다.

 

코드

fun main() {
    val input = readLine()!!
    val splitInput = input.split(" ")
    val hour = splitInput[0].toInt()
    val minutes = splitInput[1].toInt()
    printMinus45Minutes(hour,minutes)
}

fun printMinus45Minutes(hour : Int, minutes : Int) {
    var minusMinutes = minutes - 45
    var hourMinusFlag = false
    if (minusMinutes < 0) {
        minusMinutes += 60
        hourMinusFlag = true
    }

    var minusHour = hour
    if (hourMinusFlag) {
        minusHour = hour - 1
    }

    if (minusHour < 0) {
        minusHour = 23
    }
    println("$minusHour $minusMinutes")
}

 

우선 생각나는 대로 구현해서 맞긴 했는데 flag라는 것이 들어가서 리팩터링을 하고 싶습니다.

 

다른 분들의 코드에서 배운 점

fun main() {
    var (h, m) = readln().split(' ').map { it.toInt() }
    m -= 45
    if (m < 0) {
        m += 60
        h -= 1
        if (h < 0) h = 23
    }
    print("$h $m")
}

코틀린의 구조 분해 선언을 잘 활용한 예시 같습니다.