본문 바로가기
  • 개발하는 곰돌이
Algorithm/BOJ

[Kotlin] 백준 9080 : PC방 요금

by 개발하는 곰돌이 2023. 1. 12.

문제 링크

 

9080번: PC방 요금

현성이는 요즘 LINEAR 2라는 온라인 게임에 빠져있다. PC방에 가서 게임을 즐기는데, 자주 가는 PC방의 요금체계는 다음과 같다. 일반 요금으로 시간당 1000원 씩을 받으며, 야간 정액을 끊으면 5000원

www.acmicpc.net



문제 해설

분기에 따라 요금을 계산해야한다. 먼저 계산을 수월하게 하기 위해 시간을 분으로 통합한다. 그리고 분기에 따라 다음의 계산을 수행한다.

  • 현재 시간이 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()
}

댓글