문제 링크
문제 해설
문제의 규칙 1, 2번에 의해 스택을 사용하면 된다는 것을 알 수 있다. 과제의 점수와 남은 시간을 나타내는 객체를 담는 스택을 선언한 후 입력에 따라 스택에서 연산을 진행한다.
- 0이 입력되어 과제가 주어지지 않았다면 스택의 가장 윗부분 과제의 남은 시간을 1 줄인다.
- 1이 입력되어 과제가 주어졌다면 스택에 새로운 과제를 추가한다. 이 때, 과제를 받자마자 바로 시작하기 때문에 과제의 남은 시간에서 1을 뺀 값을 추가해야 한다.
각 연산을 수행할 때마다 스택 가장 윗부분 과제의 남은 시간이 0인지 체크하여 과제가 끝났다면 스택에서 과제를 제거하고 점수를 해당 과제의 점수만큼 증가시킨다.
주의할 점은 과제가 항상 주어진다는 조건이 없기 때문에 스택의 가장 윗부분을 체크할 때 스택이 비어있지 않은지도 함께 확인해야 한다.
Code
import java.util.Stack
import java.util.StringTokenizer
fun main() = with(System.`in`.bufferedReader()) {
val stack = Stack<Project>()
var score = 0
repeat(readLine().toInt()) {
StringTokenizer(readLine()).apply {
when (nextToken()) {
"0" -> if (stack.isNotEmpty()) stack.peek().time--
"1" -> stack.push(Project(nextToken().toInt(), nextToken().toInt() - 1))
}
}
if (stack.isNotEmpty() && stack.peek().time == 0) {
score += stack.pop().score
}
}
println(score)
}
class Project(val score: Int, var time: Int)
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 2757 : 엑셀 (0) | 2023.01.09 |
---|---|
[Kotlin] 백준 25497 : 기술 연계마스터 임스 (0) | 2023.01.06 |
[Kotlin] 백준 18917 : 수열과 쿼리 38 (1) | 2023.01.03 |
[Kotlin] 백준 1490 : 자리수로 나누기 (0) | 2022.12.29 |
[Kotlin] 백준 17390 : 이건 꼭 풀어야 해! (0) | 2022.12.28 |
댓글