문제 링크
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
문제 해설
큐(Queue)를 이용하면 쉽게 풀 수 있다. 우선 문서가 인쇄 대기열에 등록된 순서와 중요도를 묶은 배열을 모두 큐에 삽입한다. 그 후 M번째 문서가 인쇄될 때까지 아래 과정을 반복해서 수행한다.(코드의 14~25번째 줄)
- 현재 인쇄 대기열의 0번째 문서의 중요도가 가장 높은지 확인한다.
- 가장 높을 경우 해당 문서를 인쇄하고 원래 순서가 M이면 반복문을 종료한다.
- 가장 높은 경우가 아니면 해당 문서를 빼서 다시 큐의 맨 뒤에 삽입한다.
이 과정을 반복해서 수행하다가 반복문이 종료되었을 때의 총 인쇄 횟수가 답이 된다.
Code
import java.util.LinkedList
import java.util.Queue
import java.util.StringTokenizer
fun main() = with(System.`in`.bufferedReader()) {
val bw = System.out.bufferedWriter()
repeat(readLine().toInt()) {
val queue: Queue<IntArray> = LinkedList()
val (n, m) = readLine().split(' ').map { it.toInt() }
val st = StringTokenizer(readLine())
repeat(n) {
queue.add(intArrayOf(it, st.nextToken().toInt()))
}
var print = 0 // 인쇄를 한 횟수
while (true) {
// 큐에서 첫문서의 중요도가 큐에 있는 문서들의 최대 중요도와 동일하면 인쇄
if (queue.peek()[1] == queue.maxOf { it[1] }) {
print++
if (queue.poll()[0] == m) break // m번째 문서를 인쇄하면 반복 종료
} else {
queue.add(queue.poll())
}
}
bw.write("$print\n")
}
bw.close()
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 4949 : 균형잡힌 세상 (1) | 2022.12.02 |
---|---|
[Kotlin] 백준 2805 : 나무 자르기 (0) | 2022.12.02 |
[Kotlin] 백준 9020 : 골드바흐의 추측 (0) | 2022.11.29 |
[Kotlin] 백준 4948 : 베르트랑 공준 (0) | 2022.11.29 |
[Kotlin] 백준 2839 : 설탕 배달 (0) | 2022.11.28 |
댓글