[백준] 부재중 전화 (1333)(kotlin)

문제 설명

백준 1333번 문제 링크

입력 및 출력

» 입력

첫째 줄에 N, L, D가 공백을 사이에 두고 주어진다. 모든 수는 1,000보다 작거나 같은 자연수이다.

» 출력

첫째 줄에 강토가 전화벨을 들을 수 있는 가장 빠른 시간을 출력한다.

예제 입출력

입력 출력
1 1 1 1
1 5 5 5
1 6 5 10
2 5 7 7
2 15 7 35
2 15 10 40

문제 풀이1

import java.util.Scanner

fun main(args: Array<String>) = with(Scanner(System.`in`)) {
    var n = nextInt()
    val l = nextInt()
    val d = nextInt() - 1

    val playing = mutableListOf<Boolean>()
    val ringing = mutableListOf<Boolean>()
    val max = (n * l) + (n - 1) * 5 + d * 2 + 1

    var ll = l
    var gap = 4
    var dd = 0
    for (i in 0 until max) {
        //about a song play
        if (n <= 0) {
            playing.add(false)
        }
        else if (ll == 0) {
           playing.add(false)
           if (gap != 0) {
               gap--
           } else {
               n--
               gap = 4
               ll = l
           }
       }  else {
           playing.add(true)
           ll--
       }

        //about ringing
        if (dd == 0) {
            ringing.add(true)
            dd = d
        } else {
            ringing.add(false)
            dd--
        }

        if (!playing[i] && ringing[i]) {
            println(i)
            break
        }
    }
}
// 1 1 1 = 1
// 1 5 5 = 5
// 1 6 5 = 10
// 2 5 7 = 7
// 2 15 7 = 35
// 2 15 10 = 40