문제

참고한 코드
import heapq
def solution(operations):
h = []
for i in operations:
a, b = i.split()
if a == 'I':
heapq.heappush(h, int(b))
else:
if len(h) > 0:
if b == '1':
h.pop(h.index(heapq.nlargest(1, h)[0]))
else:
heapq.heappop(h)
if len(h) == 0:
return [0, 0]
else:
return [heapq.nlargest(1, h)[0], h[0]]
> 참고한 블로그
https://johnyejin.tistory.com/135
[Python][힙] 프로그래머스 - 이중우선순위큐(LEVEL3)
문제출처 - https://programmers.co.kr/learn/courses/30/lessons/42628 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이
johnyejin.tistory.com
> 정말 대단...
> heapq 모듈에 대한 설명
https://python.flowdas.com/library/heapq.html
heapq --- 힙 큐 알고리즘 — 파이썬 설명서 주석판
heapq --- 힙 큐 알고리즘 소스 코드: Lib/heapq.py 이 모듈은 우선순위 큐 알고리즘이라고도 하는 힙(heap) 큐 알고리즘의 구현을 제공합니다. 힙은 모든 부모 노드가 자식보다 작거나 같은 값을 갖는
python.flowdas.com
내가 해석한 코드 설명
h = []
> h 변수는 값을 담기 위한 빈 리스트입니다.
for i in operations:
a, b = i.split()
if a == 'I':
heapq.heappush(h, int(b))
else:
if len(h) > 0:
if b == '1':
h.pop(h.index(heapq.nlargest(1, h)[0]))
else:
heapq.heappop(h)
> 값이 저장된 operations을 for문(반복문)을 사용하여 하나씩 값을 받게 합니다.
> i.split() 함수를 사용하여 a, b로 각 값을 받게 합니다.
> a == 'I' 일때는 값을 h변수에 넣으면 되는데, 최소, 최대값을 빼기 위해서는 heapq 모듈에서 heapq.heappush 를 사용했습니다.
> heapq.heappush 를 사용하면 출력하면 최소값이 먼저 빠지게 된다.
> 그리고 else문에는 a가 D일 경우이므로, b == -1이면 최소값 제거, b == 1이면 최댓값 제거이다.
> if len(h) > 0 을 사용한 이유는 최소값, 최대값 제거를 하다보면 h 리스트가 빈 값일 경우가 존재한다. 그 경우를 대비해서 len(h) >0 일때만 아래 코드가 수행되게 작성을 한 것이다.
> 다시 한 번 if - else문을 사용하여 b == 1일 때 , h.pop(h.index(heapq.nlargest(1, h)[0])) 을 사용하게 해준다.
> 먼저 heapq.nlargest(1, h) 의 의미는 h 리스트에서 최대값 1개를 출력하는 것이다. 만약 2개의 가장 큰 값이면 heapq.nlargest(2, h) 를 작성하면 된다.
> 이 코드는 리스트로 출력이 되기 때문에 heapq.nlargest(1, h)[0] 을 통해서 값만 출력하기 위해서 뒤에 [0]을 작성한 것이다.
> h.index() 를 해주면 h 변수에 있는 값의 index 위치를 출력시켜준다.
> 그 index를 h.pop(index)를 해주면 h 변수에서 해당하는 index 값이 빠져나가게 된다.
> 그러면, 최종적으로 h변수에서의 최댓값이 빠져나가게 되는것이다.
> else 문에서 heapq.heappop()을 해주면 h변수에 최소값이 출력하게 된다.
if len(h) == 0:
return [0, 0]
else:
return [heapq.nlargest(1, h)[0], h[0]]
> len(h) == 0 일때는 최종 h 변수가 빈 값일 경우에는 [0, 0] 을 출력하라고 했으므로 이렇게 작성한 것이다.
> 그게 아닐 경우에는 [최댓값, 최소값] 형태로 출력하라고 했으므로, 다음과 같이 작성한 것이다.
'Coding > 프로그래머스' 카테고리의 다른 글
| [탐욕법] 체육복 with Python (0) | 2022.08.02 |
|---|---|
| [해시] 완주하지 못한 선수 with Python (0) | 2022.08.02 |
| [해시] 베스트앨범 with Python (★) (0) | 2022.07.26 |
| [해시] 전화번호 목록 with Python (★) (0) | 2022.07.22 |
| [해시] 완주하지 못한 선수 with Python (0) | 2022.07.22 |