문제 풀이
import heapq
def solution(operations):
answer = []
# 이중 우선순위 큐 생성. heapq로 사용할 예정이다.
queue = []
# 배열이 빌 때까지
while len(operations):
# operations[0]의 명령어가 I 숫자라면
# .split()은 공백을 기준으로 문자열을 자르는 것이다. () 안에 원하는 값을 넣으면 그 값을 기준으로 자를 수 있다.
if operations[0].split()[0] == 'I':
# 큐에 주어진 숫자를 삽입한다. 이 때 heapq를 사용하여 최소값이 가장 앞으로 오도록 자동 정렬하게 한다.
# int 형식으로 바꾸어 넣어서 나중에 문자가 아닌 숫자로 출력되게 하였다.
heapq.heappush(queue, int(operations[0].split()[1]))
# operations[0]의 명령어가 D 숫자라면
else:
# 빈 큐에 데이터를 삭제하라는 연산이 주어질 경우 무시한다.
if not len(queue):
operations.pop(0)
continue
# D 이후의 숫자가 1이라면 최댓값을 삭제한다. max()를 사용.
if operations[0].split()[1] == '1':
queue.remove(max(queue))
# D 이후의 숫자가 -1이라면 최솟값을 삭제한다.
else:
heapq.heappop(queue)
# 사용한 명령어는 제거한다.
operations.pop(0)
# 반복문을 완료한 후 queue가 비어있다면 [0, 0]을 출력
if not len(queue):
answer.append(0)
answer.append(0)
# queue에 값이 있다면 최대, 최소 순으로 넣으면 된다.
# 위에서 int 형식으로 바꾸어 주었기 때문에 여기선 그냥 넣어도 숫자로 들어간다.
else:
answer.append(max(queue))
answer.append(queue[0])
return answer
문제 링크
programmers.co.kr/learn/courses/30/lessons/42628?language=python3
'Python > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [Python] 가장 큰 수 (0) | 2020.12.07 |
---|---|
[프로그래머스] [Python] K번째 수 (0) | 2020.12.03 |
[프로그래머스] [Python] 디스크 컨트롤러 (0) | 2020.12.02 |
[프로그래머스] [Python] 더 맵게 (0) | 2020.11.29 |
[프로그래머스] [Python] 프린터 (0) | 2020.11.27 |