728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42628?language=swift
이중우선순위 큐 문제.
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
반응형