728x90
반응형
오늘의 학습 키워드
힙
과제
문제
N×N의 표에 수 N2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=5일 때의 예를 보자.
12 | 7 | 9 | 15 | 5 |
---|---|---|---|---|
13 | 8 | 11 | 19 | 6 |
21 | 10 | 26 | 31 | 16 |
48 | 14 | 28 | 35 | 25 |
52 | 20 | 32 | 41 | 49 |
이러한 표가 주어졌을 때, N번째 큰 수를 찾는 프로그램을 작성하시오. 표에 채워진 수는 모두 다르다.
입력
첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.
출력
첫째 줄에 N번째 큰 수를 출력한다.
예제 입력 1 복사
5
12 7 9 15 5
13 8 11 19 6
21 10 26 31 16
48 14 28 35 25
52 20 32 41 49
예제 출력 1 복사
35
풀이 과정
import heapq
: 파이썬의 힙 큐 모듈을 가져옵니다. 힙 자료구조를 사용하기 위함입니다.heap = []
: 빈 리스트를 생성합니다. 이 리스트는 최소 힙으로 사용될 것입니다.n = int(input())
: 사용자로부터 n을 입력받습니다. 이 n은 "몇 번째로 큰 수를 찾을 것인지"를 결정합니다.- 그 다음 반복문에서:
- 공백으로 구분된 숫자들을 입력받습니다
- 각 숫자에 대해:
- 만약 힙의 크기가 n보다 작으면: 숫자를 그냥 힙에 넣습니다
- 힙의 크기가 n이면: 새로운 숫자가 힙의 최솟값(heap[0])보다 클 때만 교체합니다
- 힙에서 최솟값을 꺼내고(heappop)
- 새로운 숫자를 넣습니다(heappush)
- 마지막에
heap[0]
를 출력하면 그것이 n번째로 큰 수입니다.
제출 코드 (python)
import heapq
heap = []
n = int(input())
for _ in range(n):
numbers = map(int, input().split())
for number in numbers:
if len(heap) < n:
heapq.heappush(heap, number)
else:
if heap[0] < number:
heapq.heappop(heap)
heapq.heappush(heap, number)
print(heap[0])
오늘의 회고
- 힙큐 모들이라는 것을 처음 알았는데 성능도 나쁘지 않고 좋을 것 같다.
728x90
'항해 99클럽 코테' 카테고리의 다른 글
99클럽 코테 스터디 22일차 TIL (0) | 2024.11.18 |
---|---|
99클럽 코테 스터디 21일차 TIL (3) | 2024.11.18 |
99클럽 코테 스터디 18일차 TIL (2) | 2024.11.15 |
99클럽 코테 스터디 17일차 TIL (1) | 2024.11.14 |
99클럽 코테 스터디 16일차 TIL (0) | 2024.11.13 |