[백준] 부재중 전화 (1333)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에 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