[백준] 영식이와 친구들 (1592)(kotlin)

문제 설명

백준 1592번 문제 링크

입력 및 출력

» 입력

첫째 줄에 N, M, L이 입력으로 들어온다. N은 3보다 크거나 같고, 1,000보다 작거나 같은 자연수이고, M은 1,000보다 작거나 같은 자연수이다. L은 N-1보다 작거나 같은 자연수이다.

» 출력

첫째 줄에 공을 몇 번 던지는지 횟수를 출력한다.

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

입력 출력
5 3 2 10

문제 힌트

일단 1번이 공을 잡는다. 1번은 공을 한 번 잡았기 때문에, 공을 3번에게 던진다. 3번은 공을 한 번 잡았기 때문에, 공을 5번에게 던진다. 5번은 2번에게 던지고, 2번은 4번에게 던진다. 4번은 1번에게 던진다. 1번은 이제 공을 두 번 잡았기 때문에, 공을 4번에게 던진다. 4번은 2번에게 던지고, 2번은 5번에게 던지고, 5번은 3번에게 던지고, 마지막으로 3번은 1번에게 던진다. 1번은 이제 공을 세 번 잡았기 때문에, 게임은 끝난다.

문제 풀이1

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

fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
    val (N, M, L) = readLine().split(" ").map { it.toInt() }
    var ring = IntArray(N + 1) { 0 }
    var max = 1
    var idx = 1
    var count = 0
    ring[idx] = 1

    while (max != M) {
        count++
        if (ring[idx] % 2 == 0) {
            idx = if (idx - L < 1) {
                N + idx - L
            } else {
                idx - L
            }

            ring[idx] += 1
            if (ring[idx] > max) max = ring[idx]

        } else {
            idx = if (idx + L > N) {
                (idx + L) - N
            } else {
                idx + L
            }

            ring[idx] += 1
            if (ring[idx] > max) max = ring[idx]
        }
    }

    println(count)
}