Better Code, Better Life

이중우선순위큐 - 프로그래머스 - 파이썬 풀이 본문

Coding Test/Programmers

이중우선순위큐 - 프로그래머스 - 파이썬 풀이

심재훈 2019. 8. 15. 19:00

문제 풀이

빈 큐를 만듭니다.

그리고 동작들을 차례차례 수행합니다.

이 때 max를 구하는 경우 linear하게 구하고 min을 구하는 경우 heap 구조(log n)를 이용합니다.

 

이 문제는 min 구할 때 heap 구조 없이 해도 풀리네요...

클린 코드 작성법

  1. 매직 넘버의 경우, 적절한 상수명을 붙여 관리합니다.
    1. MAX_KEY
    2. MIN_KEY
  2. operations 같은 경우, 여러 동작으로 나누어집니다. 이를 각각 관리해줍니다.
    1. process
  3. 리스트가 비어있는지 확인할 때 함수를 통해 가독성을 높여줍니다.
    1. is_empty

해답 코드

import heapq

MAX_KEY = 1
MIN_KEY = -1

def solution(operations):
    number_list = []
    for operation in operations:
        process(operation, number_list)
    if is_empty(number_list):
        number_list.append(0)
    max_num = max(number_list)
    min_num = min(number_list)
    return [max_num, min_num]

def is_empty(list1):
    empty = False
    if not list1:
        empty = True
    return empty

def process(operation, number_list):
    operation_dict = {"I": insert,
                      "D": delete}
    command, number_str = operation.split()
    number = int(number_str)
    operation_dict[command](number, number_list)

def insert(number, number_list):
    heapq.heappush(number_list, number)

def delete(number, number_list):
    if number == MAX_KEY and number_list:
        number_list.remove(max(number_list))
    if number == MIN_KEY and number_list:
        heapq.heappop(number_list)

도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!

 

문제 링크

 

코딩테스트 연습 - 이중우선순위큐 | 프로그래머스

 

programmers.co.kr

 

Comments