[백준 Python Swift] 1966번 프린터 큐

Cobugi·2021년 8월 27일
0

백준

목록 보기
8/21
post-thumbnail

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())
        }
    }
}
profile
iOS Developer 🐢

0개의 댓글