[백준/Python] 11286)절댓값 힙

Jimin_Note·2025년 7월 16일
0

[백준/Python]

목록 보기
32/35
post-thumbnail

✨ 2025.07.16 코딩테스트 문제 풀이

📌 문제: 절댓값 힙

🧠 문제 설명

  • 입력
    연산의 개수 : N
    이후 N개의 줄: 정수 x
    x ≠ 0 → 배열에 추가
    x == 0 → 절댓값 기준 가장 작은 값 출력 + 제거
    (여러 개면 실제 값이 더 작은 것 출력)

  • 출력
    0이 입력된 만큼 결과 출력
    배열이 비었는데 0이 들어오면 0 출력

💡 접근 방법

✅ heapq는 min heap 구조
💡 절댓값 기준 정렬을 위해 (abs(x), x) 형식으로 push한다.

x = -1 → push( (1, -1) )
# heap 내부 정렬: 절댓값 기준 → 값 기준

  • heapq는 최소 힙이므로 (절댓값, 원래값) 튜플로 넣으면 절댓값 기준 정렬!
    절댓값이 같을 땐 원래 값 기준 정렬된다.

💻 내가 작성한 코드

  • ⭕️ 1번째 답안(통과)
import sys, heapq

N = int(sys.stdin.readline())
points = []

for _ in range(N): 
    x = int(sys.stdin.readline())
    if x == 0:
        if points:
            print(heapq.heappop(points)[1])  
        else:
            print(0)
    else:
        heapq.heappush(points, (abs(x), x))  

✅ 배운 점

  • heapq는 기본적으로 min heap 구조! 즉, 작은 값이 먼저 나오는 구조이다.
  • (우선순위 기준, 실제 값)으로 넣으면 다양한 정렬이 가능하다.
  • 절댓값 + 실제 값 조합은 우선순위 큐 응용에서 자주 쓰인다고 한다.
profile
Hello. I'm jimin:)

0개의 댓글