큐 예제 - 2

문제 분석

  • N의 최대 범위가 100,000으로 O(nlogn) 시간 복잡도를 가진 알고리즘으로 풀 수 있다.

  • 데이터가 새로 삽입될 때마다 절댓값과 관련된 정렬이 필요하므로 우선순위 큐를 사용하면 된다.

  • 단, 절댓값 정렬이 필요하므로 우선순위 큐의 정렬 기준을 직접 정의해야 한다.

손으로 풀어보기

  1. x = 0일 때

    • 큐가 비어 있을 때는 0을 출력하고 비어있지 않을 때는 절댓값이 최소인 값을 출력한다. 단, 절댓값이 같다면 음수를 우선 출력한다.

  2. x = 1일 때

    • 큐에 새로운 값을 추가하고 우선순위 큐 정렬 기준으로 자동 정렬한다.

img_2.png

슈도코드

코드 구현 - 파이썬

파이썬에서는 데이터의 순서가 정렬의 우선순위가 된다.

  • myQueue.put((abs(request), request))

    • 파이썬에서는 우선순위 큐에 데이터를 추가할 때 순서가 정렬 우선순위의 기준이 된다.

    • abs(request)가 절댓값을 나타내므로 먼저 절댓값을 기준으로 정렬한다.

    • 그 다음으로 request를 기준으로 정렬하므로 절댓값이 같다면 음수 우선으로 정렬한다.

코드 구현 - 자바

Last updated