[백준] 영식이와 친구들 (1592)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에 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)
}