🧠 μ˜ˆμ‚°

문제

Sμ‚¬μ—μ„œλŠ” 각 λΆ€μ„œμ— ν•„μš”ν•œ λ¬Όν’ˆμ„ 지원해 μ£ΌκΈ° μœ„ν•΄ λΆ€μ„œλ³„λ‘œ λ¬Όν’ˆμ„ κ΅¬λ§€ν•˜λŠ”λ° ν•„μš”ν•œ κΈˆμ•‘μ„ μ‘°μ‚¬ν–ˆλ‹€. κ·ΈλŸ¬λ‚˜, 전체 μ˜ˆμ‚°μ΄ μ •ν•΄μ Έ 있기 λ•Œλ¬Έμ— λͺ¨λ“  λΆ€μ„œμ˜ λ¬Όν’ˆμ„ ꡬ맀해 쀄 μˆ˜λŠ” μ—†λ‹€. κ·Έλž˜μ„œ μ΅œλŒ€ν•œ λ§Žμ€ λΆ€μ„œμ˜ λ¬Όν’ˆμ„ ꡬ맀해 쀄 수 μžˆλ„λ‘ ν•˜λ €κ³  ν•œλ‹€. λ¬Όν’ˆμ„ ꡬ맀해 쀄 λ•ŒλŠ” 각 λΆ€μ„œκ°€ μ‹ μ²­ν•œ κΈˆμ•‘λ§ŒνΌμ„ λͺ¨λ‘ 지원해 μ€˜μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄ 1,000원을 μ‹ μ²­ν•œ λΆ€μ„œμ—λŠ” μ •ν™•νžˆ 1,000원을 지원해야 ν•˜λ©°, 1,000원보닀 적은 κΈˆμ•‘μ„ 지원해 쀄 μˆ˜λŠ” μ—†λ‹€. λΆ€μ„œλ³„λ‘œ μ‹ μ²­ν•œ κΈˆμ•‘μ΄ λ“€μ–΄μžˆλŠ” λ°°μ—΄ d와 μ˜ˆμ‚° budget이 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ΅œλŒ€ λͺ‡ 개의 λΆ€μ„œμ— λ¬Όν’ˆμ„ 지원할 수 μžˆλŠ”μ§€ return ν•˜λ„λ‘ ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜λΌ.

  • dλŠ” λΆ€μ„œλ³„λ‘œ μ‹ μ²­ν•œ κΈˆμ•‘μ΄ λ“€μ–΄μžˆλŠ” 배열이며, 길이(전체 λΆ€μ„œμ˜ 개수)λŠ” 1 이상 100 μ΄ν•˜μ΄λ‹€.
  • d의 각 μ›μ†ŒλŠ” λΆ€μ„œλ³„λ‘œ μ‹ μ²­ν•œ κΈˆμ•‘μ„ λ‚˜νƒ€λ‚΄λ©°, λΆ€μ„œλ³„ μ‹ μ²­ κΈˆμ•‘μ€ 1 이상 100,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€.
  • budget은 μ˜ˆμ‚°μ„ λ‚˜νƒ€λ‚΄λ©°, 1 이상 10,000,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€.

λ‚˜μ˜ 풀이

def budget(d, bg):
    max_d = 0
    for i, v in enumerate(sorted(d)):
        max_d += v
        if max_d > budget:
            return i
    return len(d)

μ΅œλŒ€ν•œ λ§Žμ€ λΆ€μ„œλ₯Ό 지원해야 ν•˜λ―€λ‘œ κΈˆμ•‘ 리슀트λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œ ν›„, μˆœμ„œλŒ€λ‘œ λ”ν•΄μ£Όμ—ˆλ‹€. λ§Œμ•½ λ”ν•œ 값이 μ˜ˆμ‚°λ³΄λ‹€ μ΄ˆκ³Όλ˜μ—ˆμ„ 경우 κ·Έ λ•Œμ˜ μΈλ±μŠ€κ°€ 초과되기 μ „κΉŒμ§€ 더해진 λΆ€μ„œμ˜ κ°œμˆ˜μ΄λ―€λ‘œ λ¦¬ν„΄ν•˜λ„λ‘ ν–ˆλ‹€.

λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이

def budget(d, bg):
    d.sort()
    while budget < sum(d):
        d.pop()
    return len(d)

와… pop() ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜λ©΄ while문으둜 정말 κ°„λ‹¨ν•˜κ²Œ 끝내버릴 수 μžˆμ—ˆλ‹€. while문을 μ‚¬μš©ν•˜κ³ λŠ” μ‹Άμ—ˆλŠ”λ° 효율적으둜 μ‚¬μš©ν•  방법이 λ– μ˜€λ₯΄μ§€ μ•Šμ•„ for문으둜 λ°”κΎΈμ–΄ ν’€μ—ˆλŠ”λ°β€¦λ° μ΄λ ‡κ²Œ 또 ν•œ 수 배우고 κ°„λ‹€.

References


Written by@ugaemi
Record things I want to remember

🐱 GitHubπŸ“š Reading Space