문제 링크
문제 해설
분기에 따라 요금을 계산해야한다. 먼저 계산을 수월하게 하기 위해 시간을 분으로 통합한다. 그리고 분기에 따라 다음의 계산을 수행한다.
- 현재 시간이 22시~3시면서 남은 플레이 시간이 5시간 이상인 경우 : 야간 정액이 이득이기 때문에 8시가 될 때까지 남은 플레이 시간을 모두 소진하고 요금에 5천원을 추가한다.
- 그 외의 경우
- 3시~8시인 경우 : 남은 플레이 시간이 5시간 이상이더라도 야간 정액을 이용할 수 있는 시간이 5시간 미만이기 때문에 시간당 1000원씩 계산한다.
- 8시~22시인 경우 : 야간 정액을 이용할 수 없기 때문에 시간당 1000원씩 계산한다.
시간을 계산할 때마다 1439분(23시 59분)이 넘어갈 경우 시간을 0분부터 시작하도록 초기화해준다. 또한, 위 분기에서 그 외의 경우는 동일한 계산을 수행하기 때문에 여러 분기로 나누지 않고 수행해도 된다.
Code
import java.util.StringTokenizer
fun main() = with(System.`in`.bufferedReader()) {
val bw = System.out.bufferedWriter()
repeat(readLine().toInt()) {
var time: Int
var playTime: Int
StringTokenizer(readLine(), ": ").apply {
time = nextToken().toInt() * 60 + nextToken().toInt()
playTime = nextToken().toInt()
}
var charge = 0
while (playTime > 0) {
if ((time >= 1320 || time <= 180) && playTime >= 300) {
while (time >= 1320 || time < 480) {
if (480 - time in 0..60) {
playTime -= 480 - time
time = 480
} else {
time += 60
time %= 1440
playTime -= 60
}
}
charge += 5000
} else {
time += 60
playTime -= 60
charge += 1000
}
time %= 1440
}
bw.write("$charge\n")
}
bw.close()
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 23629 : 이 얼마나 끔찍하고 무시무시한 수식이니 (0) | 2023.01.14 |
---|---|
[Kotlin] 백준 22234 : 가희와 은행 (0) | 2023.01.13 |
[Kotlin] 백준 21773 : 가희와 프로세스 1 (0) | 2023.01.10 |
[Kotlin] 백준 2757 : 엑셀 (0) | 2023.01.09 |
[Kotlin] 백준 25497 : 기술 연계마스터 임스 (0) | 2023.01.06 |
댓글