반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 프로그래머스(Lv.2) - 프린터 문제를 풀었습니다.
목차
Github
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42587
풀이
해당 문제는 우선순위 큐를 이용한 문제입니다.
Swift로 처음 풀어보는 우선순위 큐라 개념은 알지만 구현이 힘들었습니다.
먼저 index와 우선순위를 지닌 queue를 정의합니다. index는 우선순위가 동일한 경우도 있기 때문에 비교를 위해 필요합니다.
우선순위를 내림차순으로 정렬한 priorityQueue도 정의합니다.
반복문은 queue가 비어있을 때까지 반복하며 중간에 location과 동일한 인쇄가 감지되면 break 합니다.
queue의 first 우선순위와 priorityQueue의 first가 동일하면 index를 비교합니다.
index가 동일하면 우리가 원하는 인쇄물이니 break 하고 아니라면 우선순위 큐의 first만 remove 해줍니다.
우선순위가 동일하지 않으면 queue의 맨 끝에 다시 append 해줍니다.
전체 코드
import Foundation
func solution(_ priorities:[Int], _ location:Int) -> Int {
var result: Int = 0
var queue: [(Int,Int)] = priorities.enumerated().map { ($0.offset, $0.element) }
var priorityQueue = priorities.sorted(by: >)
while !queue.isEmpty {
let front = queue.removeFirst()
if front.1 == priorityQueue.first! {
result += 1
if location == front.0 {
break
}
priorityQueue.removeFirst()
} else {
queue.append(front)
}
}
return result
}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형