Programmers / 3단계 / 이중우선순위큐 / python / heapq

2024. 3. 18. 10:34·코딩테스트/programmers (python)

 

코딩테스트 연습 - 이중우선순위큐 | 프로그래머스 스쿨 (programmers.co.kr)

 

 

모범 답안

import heapq
def solution(operations):
    q = []
    for i in operations:
        oper, num = i.split()
        num = int(num)
        if oper == 'I':
            heapq.heappush(q, num)
        elif oper == 'D' and num == 1:
            if len(q) != 0:
                q.remove(max(q))
        else:
            if len(q)!=0:
                heapq.heappop(q)
            
    if len(q) == 0:
        answer = [0,0]
    else:
        answer = [max(q), heapq.heappop(q)]
    return answer

 

학습한 것

heap에 대한 개념 정리가 부족하였다.

heapq.heappop()을 사용해 힙에서 원소를 꺼낼 때에는 항상 가장 작은 값이 나온다.

파이썬의 힙은 최소 힙(Min Heap)으로 구성되어 있으므로 단순히 원소를 힙에 전부 넣었다가 빼는 것만으로도 시간 복잡도 O(NlogN)에 오름차순 정렬이 완료된다.

 

 

+) 최대 힙을 heapq로 구현하여 내림차순 힙 정렬을 구현하는 경우

import heapq

def heapsortDesc(iterable):
    h = []
    result = []
    
    # 모든 원소를 차례대로 힙에 삽입(부호를 변경하여)
    for value in iterable:
        heapq.heappush(h, -value)
        
    # 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
    for i in range(len(h)):
        result.append(-heapq.heappop(h))
        
    return result
    
result = heapsortDesc([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

 

 

참조

 

https://programmer-ririhan.tistory.com/138

 

[Python] 힙(heap) 제공 라이브러리 heapq

heapq 힙(Heap) 기능을 제공하기 위한 라이브러리이다. 파이썬의 힙은 최소 힙(Min Heap)으로 구성되어 있으므로 단순히 원소를 힙에 전부 넣었다가 뺴는 것만으로도 시간 복잡도 O(NlogN)에 오름차순

programmer-ririhan.tistory.com

 

'코딩테스트 > programmers (python)' 카테고리의 다른 글

Programmers / 2단계 / 숫자 변환하기 / python  (0) 2024.03.22
Programmers / 2단계 / 롤케이크 자르기 / python  (0) 2024.03.19
다익스트라(dijkstra) 알고리즘 파이썬 구현 코드  (1) 2024.03.18
Programmers / 3단계 / 단어 변환 / python / DFS/BFS  (0) 2024.03.16
Programmers / 3단계 / 정수 삼각형 / python / 동적계획법(Dynamic Programming)  (1) 2024.03.16
'코딩테스트/programmers (python)' 카테고리의 다른 글
  • Programmers / 2단계 / 숫자 변환하기 / python
  • Programmers / 2단계 / 롤케이크 자르기 / python
  • 다익스트라(dijkstra) 알고리즘 파이썬 구현 코드
  • Programmers / 3단계 / 단어 변환 / python / DFS/BFS
seulll
seulll
개인 공부 블로그입니다.
  • seulll
    seulll
    seulll
  • 전체
    오늘
    어제
    • 분류 전체보기 (353) N
      • 코딩테스트 (240)
        • programmers (python) (161)
        • 백준 (python) (77)
      • 자료구조 | 알고리즘 (14)
      • 개발 | 프로젝트 (22) N
        • Python (4)
        • Java | Spring (8)
        • Android (5)
        • Unity (3)
        • API (4)
      • CS (16)
        • Network (6)
        • SQL (2)
        • OS (4)
      • 데이터 분석 (14)
      • 기타 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 설정
  • 링크

    • GitHub
  • 인기 글

  • 태그

    API
    데이터분석
    Greedy
    Python
    카카오맵 api
    프렌즈4블록
    프로그래머스
    코딩테스트
    백엔드
    solving environment
    asterisk
    파이썬
    kakao map api
    백엔드 개발자 역량
    Boxplot
    카카오맵
    모델 성능 평가
    박스플롯
    대입 표현식
    train_test_split
    백엔드 개발자
    오블완
    티스토리챌린지
    그리디 알고리즘
    야근 지수
    2 x n 타일링
    오차행렬
    웹크롤링
    바다코끼리
    confusion matrix
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
seulll
Programmers / 3단계 / 이중우선순위큐 / python / heapq
상단으로

티스토리툴바