본문 바로가기
Algorithm/스택&큐&덱&힙

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

by HANNI하니 2023. 6. 19.

사용 언어 - Python3

문제 - 이중우선순위큐

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

정답

import heapq (정답 맞춘 여부 X)

answer 정답을 입력할 리스트

 

heap = [] 빈 리스트에 push&pop 진행

 

oprations 한개씩 확인

빈칸을 기준으로 x와 num으로 split한다. 이때 num은 수치형으로 전환해준다.

 

만약 x 가 "I"라면,

heap와 num을 heappush해준다.

 

만약 x가 "D"이고, num이 1이라면, 

heap 리스트에 값이 있다면,

heap 리스트의 최대값을 계산해주고 그 값을 remove 제거해준다.

만약 "D -1" 이라면,

heap 리스트에 값이 있다면,

heap 리스트의 최솟값을 삭제해준다. heap.heappop(heap)

 

연산 완료 후, heap 리스트에 값이 없다면 [0,0] return

heap 값이 있다면, [최대값,최솟값] = [max(heap), heapq.heappop(heap)] return

import heapq
def solution(operations):
    answer = []
    
    heap = []
    for operation in operations:
        x, num = operation.split() 
        num = int(num)
        
        if x == 'I':
            heapq.heappush(heap, num)
        elif x == 'D' and num == 1:
            if len(heap) != 0:
                max_value = max(heap)
                heap.remove(max_value) # 최대값 삭제
        else:
            if len(heap) != 0: 
                heapq.heappop(heap) # 최솟값 삭제
    
    if len(heap) == 0:
        answer = [0, 0]
    else:
        answer = [max(heap), heapq.heappop(heap)]
        
    return answer

 

 

레퍼런스

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글