스택은 말 그대로 쌓아 올리는 것을 의미한다. 반대로 큐는 줄을 의미한다. 이번 문제에서는 남은 대기 목록에서 중요도가 가장 높지 않으면 목록의 마지막에 넣는 큐에 대한 문제이다.
이중배열로 풀었다. 문서의 [인덱스, 중요도]를 담은 이중 배열 형태의 queue를 만들었다. 그 후 우선순위 오름차순 배열을 만들었다. 맨 처음 문서가 우선순위가 가장 높은 경우 출력이 된다. 그 문서의 인덱스가 location와 일치하면 출력 순서를 리턴한다. 그렇지 않은 경우, 맨 처음 문서를 꺼내 가장 마지막에 넣는다.
func solution(_ priorities:[Int], _ location:Int) -> Int {
var sortedPrioirties = priorities.sorted(by: <) // [1, 2, 2, 3]
var queue: [[Int]] = [] // [[0, 1], [1, 1], [2, 9], [3, 1], [4, 1], [5, 1]]
var count: Int = 0
for (i, v) in priorities.enumerated() {
queue.append([i, v])
}
while true {
let print = queue.removeFirst()
if print[1] == sortedPrioirties.last{
count += 1
sortedPrioirties.removeLast()
if print[0] == location { break }
} else {
queue.append(print)
}
}
return count
}