[백준/Python] 10814)나이순 정렬

Jimin_Note·2025년 7월 14일
0

[백준/Python]

목록 보기
31/35

✨ 2025.07.14 코딩테스트 문제 풀이

📌 문제: 나이순 정렬

🧠 문제 설명

  • 입력
    연산의 개수 : 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))  

✅ 배운 점

  • (우선순위 기준, 실제 값) 형태로 힙에 넣는 건 많이 쓰이는 패턴이야
  • 절댓값 + tie-breaker(원래값) → 튜플 우선순위 활용!
  • heapq는 min heap이라 낮은 값이 먼저 나와
profile
Hello. I'm jimin:)

0개의 댓글