Algorithm Problem Solving/Programmers

[프로그래머스] 스택/큐 프린터 with Swift

코코자장자장 2022. 1. 5. 12:13

안녕하세요. 오늘은 프로그래머스 2레벨 프린터 문제를 풀어보겠습니다!

프린터 문제는 인덱스가 바꾸기 때문에 로케이션이 포함된 구조체를 만들어서 문제를 풀었습니다!

 

1. waitingList를 만들어 입력된 우선순위를 넣어주겠습니다.

 

2. queue에서 가장 큰 우선순위가 맨 앞에 올대까지 enqueue와 dequeue를 해줍니다.

 

3. dequeue하면서  location을 비교하여 같을 시 while문을 탈출하고 answer를 return해줍니다.

import Foundation

struct list {
    var location:Int = 0 
    var priorities:Int = 0
}

func solution(_ priorities:[Int], _ location:Int) -> Int {
    var waitingList:[list] = [list]()
    var newlist:list = list()
    
    for i in 0..<priorities.count {
        newlist.location = i
        newlist.priorities = priorities[i]
        waitingList.append(newlist)
    }
    
    var answer = 1
    while true {
        let currentPriority = waitingList[0].priorities
        var canRemove = true
        for i in 1..<waitingList.count {
            if waitingList[i].priorities > currentPriority {
                var bufferWaitingList:[list] = [list]()
                for j in 0..<i {
                    newlist.location = waitingList[j].location
                    newlist.priorities = waitingList[j].priorities
                    bufferWaitingList.append(newlist)
                }
                for j in 0..<i {
                    waitingList.removeFirst()
                }
                waitingList.append(contentsOf: bufferWaitingList)
                canRemove = false
                break
            }
        }
        if canRemove == true {
            if waitingList[0].location == location {
                break
            }
            waitingList.removeFirst()
            answer += 1
        }
    }
    
    return answer
}

오늘은 여기까지이며, 질문이 있으시면 댓글로 남겨주세요!

 

감사합니다.