프로그래머스 : 기능개발(Swift)

스택/큐 단계의 첫번째 문제. 자료구조를 배운사람이라면 문제를 읽으면 어떤 것을 써야할지 알것이다. 이번문제에서 쓸 자료구조는 큐이다.

다만 Swift에서 스택이나 큐는 구현되어 있지 않으므로 구조체나 클래스 혹은 배열을 써서 대신해야 한다. 원래는 구조체를 써서 구현하려고 하였으나 오히려 더 복잡해져서 배열로 큐의 원리를 구현하였다.

myQueue에는 해당 작업이 완료되는데 걸리는 시간을 넣어둔다.

4 1 5 3 2

cursor는 큐에서 dequeue역할을 한다. 

4 1 5 3 2

cursor

 

cursor에 해당하는 작업보다 현재 가리키고 있는 작업시간의 이하이면 count에 1을 더하고 cursor에 1을 더한고 answer에 count를 추가한다.

cursor에 해당하는 작업보다 더 크면 거기서 중단하고 커서를 이동시킨다. 

4 1 5 3 2

                                                                                      cursor

이것을 반복하면 답이 나온다.

import Foundation

func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
    var answer : [Int] = []
    var myQueue : [Int] = []
    var cursor = 0
    for item in progresses.indices{
        myQueue.append(((100-progresses[item]-1)/speeds[item])+1)
    }
    while cursor < myQueue.count {
        var delay = myQueue[cursor]
        var count = 0
        while cursor < myQueue.count && myQueue[cursor] <= delay{
            count += 1
            cursor += 1
        }
        answer.append(count)
    }
   
    return answer
}