1966번 프린터 큐
풀이 방법
- 우선순위와 데이터를 하나의 튜플로 묶어줘야한다(
enumerate
)
- 만약 맨 앞의(이제 뽑아야할) 데이터의 우선순위가 가장 크다면 뽑아야하는데
- 그때 만약 우리가 알고싶어하는 데이터이면 출력하고 break
- 아니면 그냥 뽑는다
- 만약 맨 앞의 데이터의 우선순위가 가장 크지 않다면
풀이
Python
test_case = int(input())
for _ in range(test_case):
n, m = map(int, input().split(' '))
priority_list = [(priority, index) for index, priority in enumerate(map(int, input().split(' ')))]
print_count = 0
while True:
if priority_list[0][0] == max(priority_list, key=lambda x: x[0])[0]:
print_count += 1
if priority_list[0][1] == m:
print(print_count)
break
else:
priority_list.pop(0)
else:
priority_list.append(priority_list.pop(0))
Swift
import Foundation
let testCase = Int(readLine()!)!
for _ in 1...testCase {
let inputNM = readLine()!.split(separator: " ").map { Int($0)! }
let m = inputNM[1]
var printCount = 0
var tempPriorityList = readLine()!.split(separator: " ").map{ Int($0)! }
var priorityList: [(Int, Int)] = []
for (index, priority) in tempPriorityList.enumerated() {
let tuple = (priority, index)
priorityList.append(tuple)
}
tempPriorityList.sort()
while true {
if priorityList[0].0 == tempPriorityList.max() {
printCount += 1
if priorityList[0].1 == m {
print(printCount)
break
} else {
priorityList.removeFirst()
tempPriorityList.popLast()
}
} else {
priorityList.append(priorityList.removeFirst())
}
}
}