-
python 우선순위 que vs 힙 자료구조개발 이야기/알고리즘 및 코테 준비 2023. 1. 27. 08:59
https://github.com/zinhyeok/algorithm_study/tree/main/priority_que
GitHub - zinhyeok/algorithm_study: 알고리즘 스터디 기록용
알고리즘 스터디 기록용 . Contribute to zinhyeok/algorithm_study development by creating an account on GitHub.
github.com
문제
https://www.acmicpc.net/problem/1927
1927번: 최소 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
위의 최소 힙 문제를 풀던 중 힙 heapq가 기억이 나지 않아서
from queue import PriorityQueue N = int(input()) pque = PriorityQueue() for _ in range(N): cmd = int(sys.stdin.readline().strip()) if cmd == 0: try: print(pque.get()) except: print(0) else: pque.put(cmd)
로 문제를 해결하려고 했었는데, 시간 초과가 떠서 문제를 해결하지 못했다.
결국 min_heap으로 문제를 풀었는데 우선순위 que도 내부적으로 heapq로 구현되어있다고 알고 있는데 시간 차이가 나는 이유가 궁금해졌다.
from heapq import heappush, heappop import sys N = int(input()) min_heap = [] for _ in range(N): cmd = int(sys.stdin.readline().strip()) if cmd == 0: try: print(heappop(min_heap)) except: print(0) else: heappush(min_heap, cmd)
시간 초과 이유
아래의 참고 링크를 보니 이유가 잘 정리되어 있었다.
PrioriryQueue의 경우 thread safe 유효성 검사 과정이 있어 시간이 차이가 났던 것이다.
thread safe가 뭔데?
스레드 safety를 예전 OOP 수업 때 들었었는데..! 그 기억을 되살려보면 멀티 스레드 프로그래밍에서 공유자원에 여러 스레드로부터 동시에 접근이 이루어졌을 때 프로그램의 실행에 문제가 없도록 하는 방식이었다.
결론은 왠만하면(thead safety를 신경쓰지 않아도 되는 문제는) heapq로 문제를 해결해보자!
참고자료
https://slowsure.tistory.com/130
[Python/파이썬] PriorityQueue & heapq / 우선순위큐와 힙큐
백준에서 문제를 풀다가 Priority Queue 와 Heapq 차이로 문제 시간에 걸릴 수도 안 걸릴 수도 있다는걸 알았다. Priority Queue 와 Heaq의 차이를 알아보기 위해서 라이브러리를 뜯어서 맛보자 1. 라이브러
slowsure.tistory.com
https://velog.io/@highcho/Algorithm-baekjoon-1927
[Algorithm] 백준 1927 - 최소 힙 in Python(파이썬)
알고리즘: Data Structure(Min-heap), 풀이: 최소 힙 기본 구조의 이해와 활용
velog.io
'개발 이야기 > 알고리즘 및 코테 준비' 카테고리의 다른 글
[Softeer][21년 재직자 대회 예선] 비밀메뉴 (0) 2024.09.04 [알고리즘 실습환경 구축] 알고리즘 튜토리얼 및 개요 (9) 2024.09.03 Python Counter와 Counter 사용 문제(백준 2108, 최빈값 찾기) (0) 2023.01.24 Python List 자료형 변경과 Sort (1) 2023.01.20 python 2중 배열 문제&행,열 다루기 (0) 2023.01.11