Hanbit the Developer
[Python] 백준 12018번: Yonsei TOTO 본문
https://www.acmicpc.net/problem/12018
import sys
input = sys.stdin.readline
def getMinMileage(p, l, nums):
minMileageIndex = p - l
if minMileageIndex < 0:
return 1
else:
nums.sort()
return nums[minMileageIndex]
def getMaxClassCount(m, mileages):
maxClassCount = 0
mileages.sort()
for mileage in mileages:
m -= mileage
if m < 0:
break
maxClassCount += 1
return maxClassCount
if __name__ == '__main__':
n, m = map(int, input().split())
mileages = []
# input / set mileages
for i in range(n):
p, l = map(int, input().split())
nums = list(map(int, input().split()))
mileages.append(getMinMileage(p, l, nums))
# spend mileages / output
maxClassCount = getMaxClassCount(m, mileages)
print(maxClassCount)
각 과목별로, 해당 과목을 듣기 위해 소비해야할 최소 마일리지를 계산해내어(getMinMileage() 함수) mileages에 저장한다. 이 때 수강인원이 신청인원보다 많을 경우에는 바로 1을 반환하고, 아닐 경우에는 다른 학생들이 신청한 마일리지들을 오름차순으로 정렬한 뒤, (신청 인원) - (수강 인원)의 인덱스의 값을 반환해준다.
이후에는 해당 마일리지들을 오름차순으로 정렬한 뒤 이를 순차적으로 돌면서, 입력받은 m을 감소시키고, m이 0 미만이 될 경우 더이상 신청할 수 없으므로 break로 탈출해준다. 만약 m이 아직 0 이상일 경우에는 maxClassCount를 증가시키면 된다. maxClassCount가 곧 신청한 클래스의 개수이므로 해당 변수를 출력해주면 된다.
'Algorithm > 백준' 카테고리의 다른 글
[Python] 10165번: 버스 노선(플레 처음으로 성공한 날) (0) | 2021.06.11 |
---|---|
[Python] 백준 2036번: 수열의 점수(시간복잡도 1등) (0) | 2021.06.10 |
[Python] 백준 2258번: 정육점(시간복잡도 3등) (0) | 2021.06.07 |
[Python] 백준 10800번: 컬러볼 (0) | 2021.06.06 |
[Python] 백준 2885번: 초콜릿 식사 (0) | 2021.06.04 |