https://www.acmicpc.net/problem/12018
1) 한번에 이해하기 어려워서 문제를 몇번 더 읽었다.
2) 머리속으로 계속 생각하다 보니 sort reverse를 해서 구현하면 된다고 생각했다.
3) 백준 실버3이라 만만하게 생각했는데 생각보다 헷갈렸다.
1) 마일리지를 입력받고, 내림차순으로 정렬한다.(sort.reverse)
2) 정원보다 수강신청인원이 많거나 같다면 커트라인과 같게 리스트에 담는다.
3) 미달일 경우 마일리지 1을 리스트에 담는다.
4) 그리디 알고리즘(누적마일리지가 0일때까지) 카운트를 +=1
N,M=map(int,(input().split()))
wish=[] # 마일리지 최소 필요 리스트
for i in range(N):
P,L=map(int,input().split())
point=(list(map(int,input().split())))
point.sort(reverse=True) #내림차순으로 정렬
if P>=L:
wish.append(point[L-1]) #수강 최소 필요 마일리지 append
else:
wish.append(1) #미달일 경우 1 append
wish.sort() #오름차순으로 정렬
cnt=0
for i in wish:
if M-i>=0:
cnt+=1
M=M-i
print(cnt) #else를 쓰면 for문이 끝날때까지 print됨!