본문 바로가기

Python/프로그래머스

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

문제 풀이

 

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

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr