우당탕탕 개발일지

[힙(Heap)] 프로그래머스 level 3 이중우선순위큐 (Python 파이썬) 본문

알고리즘

[힙(Heap)] 프로그래머스 level 3 이중우선순위큐 (Python 파이썬)

민아당긴아 2024. 9. 28. 23:22

💡문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

💡문제 분석 요약

연산 operations 리스트가 매개변수로 주어진다.

operations에 나온대로 큐에 연산을 수행한다.

1. "I 숫자" : 큐에 숫자 삽입

2. "D 1" : 큐에서 최댓값 삭제

3. "D -1" 큐에서 최솟값 삭제

이 연산을 모두 마치고 난 뒤 큐에 남은 최댓값과 최솟값을 출력한다.

큐에 남은 게 없다면 [0, 0]을 출력한다.

 

💡알고리즘 설계

1. if문을 사용해서 연산에 대한 코드를 구현한다.

  • 1. "I 숫자" : 큐에 숫자 삽입 -> append
  • 2. "D 1" : 큐에서 최댓값 삭제 -> a[:-1]
  • 3. "D -1" 큐에서 최솟값 삭제 -> a[1:]

2. 연산이 마칠 때마다 오름차순 정렬해준다.

3. 큐가 비어있으면 [0, 0] 반환하고, 아니면 [최댓값, 최솟값] 반환한다.

 

💡코드

def solution(operations):
    answer = []
    for o in operations:
        if o[0] == "I":
            answer.append(int(o[2:]))
        elif o == "D 1":
            answer = answer[:-1]
        else:
            answer = answer[1:]
        answer.sort()
    if answer == []:
        return [0, 0]
    else:
        return [answer[-1], answer[0]]

 

💡 다른 풀이

나는 이렇게 간단하게 풀었는데, 카테고리가 힙(Heap)인 만큼 힙 자료구조로 푼 풀이들이 많았다.

💡 느낀점 or 기억할정보

갈 길이 멀구나..