def luckBalance_1(k, contests):
# Write your code here
answer=0
candi = [] # 중요한 콘테스트만 담을 리스트
for i in contests:
if i[1] ==0:
answer+=i[0] # 중요하지 않은 콘테스트는 모두 져도 된다
else:
candi.append(i)
candi.sort(reverse=True)
for a,b in enumerate(candi): # 중요한 콘테스트는 k번만 질 수 있다
if a+1 <=k:
answer+=b[0]
else:
answer-=b[0]
return answer
# 10000 iteration 0.251 seconds
그리디 알고리즘 문제. 디스커션에는 애초에 amount of luck을 기준으로 정렬하고 중요한 콘테스트를 k번만 지게 만드는 코드가 더 짧았지만, 전체 리스트를 정렬하는 것보다 중요한 콘테스트만 뽑아서 정렬하는 것이 더 낫다고 생각했다. 주말이니까 굳이 test case중에 긴 것들을 가져와서 10000번 반복해서 시간 비교를 해보고 주석에 추가해두었다...ㅎ 생각과는 다르게 짧은 코드가 더 빨랐지만 엄청난 차이는 나지 않았다. (마지막 자존심)
# copied from discussion
def luckBalance_2(k, contests):
total_luck = 0
for luck,important in sorted(contests, reverse=True):
if not important:
total_luck += luck
elif k:
total_luck += luck
k -= 1
else:
total_luck -= luck
return total_luck
# 10000 iteration 0.181 seconds