·연습 문제

가장 작은 K개

문제 설명PROBLEM

가장 작은 K개

왜 이 문제를 푸나요?

전체 정렬이 필요하지 않고 최솟값 몇 개만 필요할 때 힙을 선택하는 법을 익힙니다. 우선순위 큐가 어떤 문제에서 정렬보다 적합한지 판단하는 연습입니다.

익혀야 할 개념

  • 최소 힙
  • heapify
  • heappop
  • 부분 선택

과제

정수 리스트에서 가장 작은 k개를 오름차순 리스트로 반환하세요. 입력은 변경하지 않으며 sorted()sort()는 사용하지 않습니다. heapq를 사용하세요.

함수

k_smallest(numbers, k)

목표 복잡도

힙 구성 O(n), k회 추출 O(k log n)

테스트 케이스

실행하면 아래 순서대로 채점합니다. print() 출력도 이 순서대로 쌓입니다.

#이름numbersk기대값
1일반[7, 2, 9, 1, 5]3[1, 2, 5]
2중복[4, 1, 1, 3]2[1, 1]
3k가 더 큼[3, 2]5[2, 3]
4k가 0[1, 2]0[]
5음수 포함[4, -3, 8, -1, 2]3[-3, -1, 2]

Python 표준 라이브러리는 사용할 수 있습니다. 함수 이름과 매개변수는 제시된 형태를 유지하세요.

개념 노트와 실수 포인트

  • 최솟값을 O(1)에 확인하고 O(log n)에 추가·삭제하는 완전이진트리 구조입니다.
  • 파이썬 heapq는 최소 힙입니다.