백준 7662 이중 우선 큐
백준 7662 이중 우선 큐
문제
이중 우선순위 큐(dual priority queue)는 전형적인 우선순위 큐처럼 데이터를 삽입, 삭제할 수 있는 자료 구조이다. 전형적인 큐와의 차이점은 데이터를 삭제할 때 연산(operation) 명령에 따라 우선순위가 가장 높은 데이터 또는 가장 낮은 데이터 중 하나를 삭제하는 점이다. 이중 우선순위 큐를 위해선 두 가지 연산이 사용되는데, 하나는 데이터를 삽입하는 연산이고 다른 하나는 데이터를 삭제하는 연산이다. 데이터를 삭제하는 연산은 또 두 가지로 구분되는데 하나는 우선순위가 가장 높은 것을 삭제하기 위한 것이고 다른 하나는 우선순위가 가장 낮은 것을 삭제하기 위한 것이다.
정수만 저장하는 이중 우선순위 큐 Q가 있다고 가정하자. Q에 저장된 각 정수의 값 자체를 우선순위라고 간주하자.
Q에 적용될 일련의 연산이 주어질 때 이를 처리한 후 최종적으로 Q에 저장된 데이터 중 최댓값과 최솟값을 출력하는 프로그램을 작성하라.
풀이
1 | import heapq |
heapq 내장 함수들로만 문제를 풀었는데 시간 초과가 신나게 떴다.
그래서 이래저래 구글링하면서 다른 분들 블로그를 보고 풀이를 적으며 이해하려 한다.
sync 함수는 동기화하는 함수이다. 최대 힙과 최소 힙을 만들고, 값을 빼다 보면 두 배열의 값이 달라지기 때문이다.
힙의 최댓값의 인덱스는 0이다. 이 때 두 배열은 서로 인덱스 0의 값이 끝에 위치하기 때문에 id가 0인 것을 pop하는 방식으로 서로 동기화 할 수 있다.
Comment