본문 바로가기

미래 먹거리를 위하여

[파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기4 (맥OS 기준)

OS: MAC

참고: 👉 점프 투 파이썬 - 라이브러리 예제 바로가기

012. 수상자 3명을 선정하려면? ― heapq(힙큐)

구분 설명 예제 결과
모듈 임포트 힙(Heap) 기능 사용 준비 import heapq -
기본 개념 힙은 가장 작은 값(min-heap)을
빠르게 꺼낼 수 있는 자료구조
heap = []
heapq.heappush(heap, 5)
print(heap)
[5]
데이터 추가
(삽입)
heappush(heap, item) : 힙에 값을 추가 heapq.heappush(heap, 3)
heapq.heappush(heap, 8)
print(heap)
[3, 5, 8]
데이터 꺼내기
(삭제)
heappop(heap) : 가장 작은 값 꺼냄 heapq.heappop(heap) 3
한 번에 힙 생성 heapify(list): 리스트를 힙으로 변환 nums = [7, 2, 5, 3]
heapq.heapify(nums)
print(nums)
[2, 3, 5, 7]
가장 작은 값
3개 추출
nsmallest(n, iterable): 가장 작은 n개 반환 heapq.nsmallest(3, [90, 15,  290, 289]) [15, 90, 289]
(가장 작은 3개)
가장 큰 값
3개 추출
nlargest(n, iterable): 가장 큰 n개 반환 heapq.nlargest(3, [90, 15,  290, 289]) [290, 289, 90]
(가장 큰 3개)
K번째
작은 요소 찾기
def find_kth_smallest(nums, k):
    return heapq.nsmallest(k, nums)[-1]

k번째로 작은 요소 찾기
import heapq

# 함수 정의
def find_kth_smallest(nums, k):
    return heapq.nsmallest(k, nums)[-1]

# 테스트
nums = [7, 2, 9, 4, 3, 8]
k = 3
result = find_kth_smallest(nums, k)
print(f"{k}번째로 작은 수는 {result}입니다.")
3번째로 작은 수는 4입니다.

K번째 큰 요소 찾기 def find_kth_largest(nums, k):
    return heapq.nlargest(k, nums)[-1]

k번째로 큰 요소 찾기
import heapq
def find_kth_largest(nums, k):
    return heapq.nlargest(k, nums)[-1]
nums = [7, 2, 9, 4, 3, 8]
k = 2
result = find_kth_largest(nums, k)
print(f"{k}번째로 큰 수는 {result}입니다.")
2번째로 큰 수는 8입니다.

 

라이브러리 예제 문제: 교내 육상대회의 100m 달리기 경기 결과 다음과 같은 기록을 얻었다. 이 결과를 바탕으로 3명에게 기록 순으로 금, 은, 동메달을 수여하고자 한다. 기록이 좋은 순서대로 3명을 자동으로 뽑는 프로그램은 어떻게 만들면 될까?

문제 강보람 12.23 김지원 12.31 박시우 11.98 장준혁 11.99 차정웅 11.67 박중수 12.02 차동현 11.57 고미숙 12.04 한시우 11.92 이민석 12.22
풀이