해설
처음에 풀이가 안나서 참고해서 최대 힙으로 풀고자 했으나, 메모리 초과가 났다. 결국 몇시간 머리를 쥐어짜다가.
정답을 참고하였는데 상위 N개만 유지해주는 코드를 만드는 것이였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | # N번째 큰수 # 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 # 1 초 12 MB (하단 참고) 7571 3077 2067 40.609% # 문제 # 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 # # n = int(input()) # l = [] # for _ in range(n): # for element in list(map(int, input().split())): # heapq.heappush(l, -element) # # # for _ in range(n - 1): # heapq.heappop(l) # # print(-(heapq.heappop(l))) import heapq N = int(input()) h = [] # 먼저 한번 상위 n 개를입력을 받아 놓고 상위 n를 해준다. for n in map(int, input().split()): heapq.heappush(h, n) # 두번째 열부터 입력을 받는데 for _ in range(1, N): #바로 받고 빼준다. # n = 5 for n in map(int, input().split()): #넣어주고 heapq.heappush(h, n) # 바로바로 빼줘서 상위 n 개만 놔눈다. 메모리 초과가 안난다. print(heapq.heappop(h)) print(heapq.heappop(h)) | cs |
'백준 > 정렬' 카테고리의 다른 글
[파이썬]-백준(BOJ)1302 _ 베스트셀러 (0) | 2021.04.28 |
---|