[Level 2 / 큐] 프린터 + Swift

sanghee·2021년 9월 1일
0

🙈코딩테스트

목록 보기
13/52
post-thumbnail

프린터

코딩테스트 연습 - 프린터

스택/큐

스택은 말 그대로 쌓아 올리는 것을 의미한다. 반대로 큐는 줄을 의미한다. 이번 문제에서는 남은 대기 목록에서 중요도가 가장 높지 않으면 목록의 마지막에 넣는 큐에 대한 문제이다.

문제 개념

  1. 큐와 우선순위 큐 두개를 만든다.
  2. 큐는 배열의 인덱스와 함께 우선순위를 저장한다.
  3. 우선순위 큐는 우선순위를 정렬해서 저장한다.
  4. 큐에서 하나 pop하고 우선순위큐에서 pop해서 우선순위를 비교한다.
  5. 같다면 리턴하고 같지 않다면 꺼내서 맨 끝에 push한다.

나의 풀이

이중배열로 풀었다. 문서의 [인덱스, 중요도]를 담은 이중 배열 형태의 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
}

참고사이트

profile
👩‍💻

0개의 댓글