👨🏻‍💻iOS 공부/Swift_알고리즘 풀이

[프로그래머스] 이중우선순위큐

728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/42628?language=swift 

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr

이중우선순위 큐 문제.

Lev 3에 해당하는 문제인데 3단계보다 더 아래인 듯한 느낌이다.. 

다른 2단계 문제가 어려워서일지도...?

 

아무튼 queue의 특성인 FIFO를 활용하면 된다. 

 

근데 문제를 보면 최댓값, 최솟값을 찾아서 제거해야하는 부분을 볼 수 있다. 

이건 그냥 FIFO만으로는 구현해낼 수 없기에 조건에 맞게 정렬 또한 해줘야 한다. 

오름차순하여 FIFO하면 최솟값을 얻을 수 있는 것이고, 내림차순하여 FIFO하면 최댓값을 얻을 수 있다.  

 

그 이외의 것들은 케이스만 잘 따져주면 된다!

 

import Foundation

func solution(_ operations:[String]) -> [Int] {
    // 큐
    var queue = [Int]()
    // " "로 분리
    var operations = operations.map {$0.components(separatedBy: " ")}
    
    for operation in operations {
        // 연산
        let oper = operation[0]
        // 숫자 or 최대/최소 지울지 결정
        let num = Int(operation[1])!
        
        switch oper {
        // I일 경우 queue append
        case "I":
            queue.append(num)
        // D일 경우 queue remove
        case "D":            
            // 배열에 값이 있을 때만 제거할 수 있음
            if !queue.isEmpty {
                // 최댓값 
                if num == 1 {
                    queue.sort {$0 > $1}
                // 최솟값 
                } else {
                    queue.sort {$0 < $1}
                }
                queue.removeFirst()
            }            
        default:
            break
        }
    }
    // 빈 배열일 경우 [0,0] 반환, 아닐 경우 [최대,최소] 반환
    return queue == [] ? [0,0] : [queue.max()!, queue.min()!]
}

 

Level이 의미가 없는 듯한 문제가 하나 둘 씩 있는 것 같다. 

level만 보고 지레 겁을 먹기도 했는데, 그럴 필요 없을 것 같다!

 

끄읕

728x90
반응형