Xcode/Swift - Algorithm
Swift ) 프로그래머스(Lv3) - 이중우선순위큐 (Heap)
후르륵짭짭
2020. 10. 4. 22:18
728x90
반응형
programmers.co.kr/learn/courses/30/lessons/42628
코딩테스트 연습 - 이중우선순위큐
programmers.co.kr
안녕하세요 후르륵짭짭 입니다.
오랜만에 알고리즘 문제를 들고 온 것 같습니다.
어렵지 않는데, 그냥 글을 올립니다 ㅎㅎㅎ
** 문제 해결 **
hururuek-chapchap.tistory.com/116
Swift ) 프로그래머스(Lv3) - 디스크 컨트롤러 (PriorityQueue)
programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. �
hururuek-chapchap.tistory.com
예전에 우선순위 큐를 구현 하는 방법에 대해서 설명 했습니다.
그러면 정말 간단하게 아래 코드 처럼 적어주면 끝~!
func solution(_ operations:[String]) -> [Int] {
var maxHeap : [Int] = []
for element in operations{
let split = element.components(separatedBy: " ")
let commend = split[0]
let number = split[1]
if commend == "I"{
makeMAXHeap(&maxHeap, Int(number)!)
}
else {
if maxHeap.isEmpty {continue}
if number == "1"{
maxHeap.removeLast()
}
else{
maxHeap.removeFirst()
}
}
}
print(maxHeap)
return maxHeap.isEmpty ? [0,0] : [maxHeap.max()! , maxHeap.min()!]
}
func makeMAXHeap (_ maxHeap : inout [Int] ,_ number : Int){
var start = 0
var end = maxHeap.count - 1
if maxHeap.isEmpty {
maxHeap.append(number)
return
}
while start <= end {
let mid = (start + end) / 2
if maxHeap[mid] < number {
start = mid + 1
}
else{
end = mid - 1
}
}
maxHeap.insert(number, at: start)
}
어차피 배열로 정렬이 되기 때문에 , 큰 문제 없이 최소값은 removeFirst 해주고 최대 값은 removeLast 해주면
됩니다.
간단하죠??
728x90
반응형