이중우선순위큐 (https://programmers.co.kr/learn/courses/30/lessons/42628)
프로그래머스의 Level3 문제 중에 굉장히 쉬운 편이라고 생각했습니다. 문제에서 주어진 기능을 그대로 구현하면 문제를 해결할 수 있었습니다.
def solution(operations):
answer = [0, 0]
queue = [] #미리 만들어 놓은 queue
for op in operations:
inputs = op.split(" "); #공백을 기준으로 명령어 숫자를 구분,
key = inputs[0];
num = int(inputs[1]);
if key == "I": #명령어가 I일 경우 queue에 값 추가
queue.append(num);
queue.sort(); #사실 이름만 queue인 리스트라서 매번 직접 정렬을 해줍니다.
else: #명령어가 D일 경우
if len(queue) == 0: #queue가 비어있을 때에는 건너뜀
continue;
else:
if num<0: #명령어가 D이고 -1일 경우 최솟값 삭제
queue.pop(0);
else: #명령어가 D이고 1일 경우 최댓값 삭제
queue.pop();
if len(queue) == 0: #값이 하나도 존재하지 않을 경우 [0,0] 리턴
return answer;
answer[0] = queue[-1]; #아닐 경우 최대값 최소값을 입력해줌
answer[1] = queue[0];
return answer
=> 큐에 정렬기능이 추가된 우선순위 큐( 파이썬의 경우 PriorityQueue, heapq )를 사용할 경우 더 빠른 코드를 만들어 낼 수 있지만 이렇게 풀어도 속도 기준을 통과하였습니다.