-
[프로그래머스] 이중 우선 순위 큐 (python)알고리즘 2024. 7. 3. 12:43

문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42628
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제

풀이
- 1T( 실패: IndexError: index out of range )
import heapq def solution(operations): # 최대힙, 최소힙 빈 리스트 max_pq=[] min_pq=[] for i in operations: # I면 숫자 삽입 # 최소는 그대로, 최대는 -붙여서 # 숫자 빼고 넣을 땐, 최소 최대 둘다 적용 if i[0]=='I': _,num=i.split(' ') num=int(num) heapq.heappush(min_pq,num) heapq.heappush(max_pq,-num) # 최소힙 1번 삭제, 최대힙에선 찾아서 삭제 elif i=='D -1': min_val=heapq.heappop(min_pq) max_pq.remove(-min_val) heapq.heapify(max_pq) elif i=='D 1': max_val=heapq.heappop(max_pq) min_pq.remove(-max_val) heapq.heapify(min_pq) if not min_pq: return [0,0] else: max_val = -max_pq[0] min_val = min_pq[0] return [max_val, min_val]heapq.heappop을 호출할 때 힙이 비어 있는 경우를 고려해야 한다.
따라서
elif operation == 'D -1' and min_pq:
elif operation == 'D 1' and max_pq:
로 뒤에 리스트가 존재한다는 조건을 추가로 붙여줬다.
- 2T(성공)
import heapq def solution(operations): # 최대힙, 최소힙 빈 리스트 max_pq=[] min_pq=[] for i in operations: # I면 숫자 삽입 # 최소는 그대로, 최대는 -붙여서 # 숫자 빼고 넣을 땐, 최소 최대 둘다 적용 if i[0]=='I': _,num=i.split(' ') num=int(num) heapq.heappush(min_pq,num) heapq.heappush(max_pq,-num) # 최소힙 1번 삭제, 최대힙에선 찾아서 삭제 elif i=='D -1'and min_pq: min_val=heapq.heappop(min_pq) max_pq.remove(-min_val) heapq.heapify(max_pq) elif i=='D 1'and max_pq: max_val=heapq.heappop(max_pq) min_pq.remove(-max_val) heapq.heapify(min_pq) if not min_pq: return [0,0] else: max_val = -max_pq[0] min_val = min_pq[0] return [max_val, min_val]'알고리즘' 카테고리의 다른 글
[프로그래머스] 연속된 부분 수열의 합 (python) (0) 2024.08.29 [프로그래머스] 등대 (python) (1) 2024.08.29 [그리디/heapq] 백준.1715 카드 정렬하기 (python) (0) 2024.07.02 [프로그래머스] 스택/큐 (python) (0) 2024.06.15 [프로그래머스] H-Index (0) 2024.06.13