나의 기록, 현진록

[Swift] 프로그래머스 코딩테스트 연습 > 스택/큐 > 프린터 본문

Programming/Algorithm & Data Structure

[Swift] 프로그래머스 코딩테스트 연습 > 스택/큐 > 프린터

guswlsdk 2022. 5. 12. 11:40
반응형

https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

문제풀이

 

 큐 첫번째 작업보다 우선순위가 더 높은 작업이 있다 ? 1번부터, 없으면 2번부터

 1. 큐에 우선순위가 가장 높은 작업을 맨 앞으로 옮기기 이 때 location(인덱스)도 같이 움직여줘야함(값에 의존 X 위치에 의존 O)

 2. 위 작업이 끝나면 맨 앞에 있는 작업을 출력(큐.removeFirst), 인쇄 순서를 나타내는 count += 1

 3.  location = 0 일 경우 내가 인쇄를 요청한 문서가 출력되었다는 의미 -> count 출력

 

 

코드

import Foundation

func solution(_ priorities:[Int], _ location:Int) -> Int {
    var q = priorities
    var loc = location
    var count = 0
    
    while !q.isEmpty{
        var index = 1
        while index < q.count{
            if q[0] < q[index]{
                // 우선순위가 높은 작업이 있을 때
                q.append(q.removeFirst())
                index = 1
                if loc - 1 < 0 {
                    loc = q.count-1
                }else{
                    loc -= 1
                }
            }else{
                index += 1
            }
        }
        q.removeFirst()
        count += 1
        
        if loc == 0{
            break
        }else{
            if loc - 1 < 0 {
                loc = q.count-1
            }else{
                loc -= 1
            }
        }
    }
    return count
}
반응형