<로직 고민/>
- 일단 최대한 많은 부서를 지원해 주려면 적은 금액을 지원한 부서부터 선택하면 될 것 같다
- 그러니 d의 요소들을 오름차순으로 정렬하고 for문을 돌려 budget보다 커지기 전까지 더해주면서 answer를 1씩 올린다
def solution(d, budget):
total, answer = 0, 0
d.sort()
for apply in d:
total += apply
answer += 1
if total > budget:
answer -= 1
return answer
elif total == budget:
return answer
- 이렇게 코드를 짜봤다
- total이 budget보다 커졌을 때 마지막에 더한 건 빼야 하니까 answer에서 1을 뺀 후에 리턴하고, 값이 같을 때는 마지막에 더한 것까지 포함하니까 answer를 그대로 리턴한다
- 근데 테스트2, 6, 18, 19에서 실패가 떴다
- 흠..ㅎ..~ 무조건 작은 수부터 더하는 게 최선은 아닌가보다
- 찾아보니 부서가 1개인 경우도 생각해야 한다고 해서 코드를 수정했다
def solution(d, budget):
total, answer = 0, 0
d.sort()
for apply in d:
total += apply
answer += 1
if total > budget:
answer -= 1
return answer
elif (total == budget) or (total < budget and len(d) == 1):
return answer
- 이렇게 하니 2번은 통과하는데 여전히 6,18,19번 케이스에서 실패가 뜬다,,,
- 아 풀렸다
- 어처구니없지만 return answer가 반복되는 게 보기 안 좋아 보여서 return answer를 가장 바깥에 두고 if문이나 elif문을 통과하게 되면 break를 걸었더니 통과됐다...!!!
- 무슨 차이지....? break 대신 return 값이 있을 때도 똑같이 for문은 더이상 돌리지 않고 바로 값을 반환하는 거 아닌가?
- 뭐 여튼 최근에 계속 1점 아님 2점만 받았는데 이 풀이로 7점을 받았다..!!
- 왜죠?
<완성된 풀이/>
def solution(d, budget):
total, answer = 0, 0
d.sort()
for apply in d:
total += apply
answer += 1
if total > budget:
answer -= 1
break
elif (total == budget) or (total < budget and len(d) == 1):
break
return answer
<다른 사람 풀이/>
- 천재풀이1
def solution(d, budget):
d.sort()
while budget < sum(d):
d.pop()
return len(d)
- 난 진짜 바보같이 풀었구나 깨닫는다
- 내 나름대로 풀이를 하자면 budget이 d 요소들의 합보다 작아질 때까지 while문이 도는데 한 바퀴 돌 때마다 d에서 pop을 한다 그럼 가장 큰 수부터 삭제된다(sort로 오름차순 정렬했으니까)
- sum(d)가 budget보다 작아져서 while문을 빠져나오게 되면 d 요소들의 개수를 반환한다
- 와 진짜 소름 어케 이런 생각을..!!!
- 천재풀이2
def solution(d, budget):
d.sort()
cnt = 0
for i in d :
budget -= i
if budget < 0 :
break
cnt += 1
answer = cnt
return answer
- 이건 내 풀이와 비슷하지만 budget에서 빼는 방식이고 if문을 하나만 쓰고 카운팅도 if문 다음에 한다...!!
- 카운팅을 if문 다음에 하는 방식으로 나도 바꿔야지...ㅎㅎ
<수정/>
def solution(d, budget):
total, answer = 0, 0
d.sort()
for apply in d:
total += apply
if total > budget:
break
answer += 1
return answer
- 천재풀이2를 참조해서 기존 내 코드를 좀 더 간결하게 바꿔보았다
- 이렇게 했으면 7점보다 더 많이 받았으려나...?!