티스토리 뷰

PS

[Swift] 백준_프린터 큐(1966)

희철 2023. 1. 6. 02:32

문제

 

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

 

 

풀이

 

큐를 이용해서 풀 수 있는 문제였다.

 

프린터 큐를 돌리며 가장 큰 값인 경우에 출력하고, 그 값을 큐에서 제거하는 것을 반복해주었다. 타겟이 아닌 문서가 큐에서 제거될때마다 count값을 증가시켜주었고, 타겟의 인덱스를 1씩 감소시켜주었다.

 

타겟의 인덱스가 0이고, 타겟이 큐에서 가장 큰 값일때의 count를 출력하였다.

 

배열에서 max값을 구하는 것은 O(N)인데 프린터가 될때마다 max값이 바뀌어서 시간이 더 많이 들거라고 생각했다. 그래서 while문 이전에 한 번의 오름차순 정렬을 통해 배열을 만들고 last와 removeLast()를 이용하였다.

import Foundation

let caseCount = Int(readLine()!)!
for _ in 0..<caseCount {
    let input = readLine()!.split(separator: " ").map { Int(String($0))! }
    var priority = readLine()!.split(separator: " ").map { Int(String($0))! }
    var sorted = priority.sorted(by: <)
    var target = input[1]
    var count = 1
    while true {
        if priority[0] == sorted.last! {
            if target == 0 {
                print(count)
                break
            }
            priority.removeFirst()
            sorted.removeLast()
            count += 1
            target -= 1
        } else {
            priority.append(priority.removeFirst())
            target = target == 0 ? priority.count - 1 : target - 1
        }
    }    
}

 

 

_____________________________________________________________________________________________________

 

큐를 이용할땐 시간복잡도를 조금 더 생각해보자.

'PS' 카테고리의 다른 글

[Swift] 백준_트럭(13335)  (0) 2023.01.06
[Swift] 백준_앵무새  (0) 2023.01.06
[Swift] 백준_문자열 폭발(9935)  (0) 2023.01.05
[Swift] 백준_옥상정원 꾸미기(6198)  (0) 2023.01.05
[Swift] 프로그래머스_올바른 괄호  (1) 2022.10.13
댓글
최근에 올라온 글
Total
Today
Yesterday