μ•Œκ³ λ¦¬μ¦˜

그리디 문제 풀이 - λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘

ghtis1798 2021. 6. 12. 17:46

πŸ”Έ λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘

동전 nκ°œκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, ν•΄λ‹Ή λ™μ „λ“€λ‘œ λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘μ„ κ΅¬ν•˜μ—¬λΌ.

동전은 μ΅œλŒ€ 1000개, 각 λ™μ „μ˜ ν¬κΈ°λŠ” μ΅œλŒ€ 1,000,000원이닀.

ex) 1,2,3, 7원 동전이 μ£Όμ–΄μ‘Œμ„ λ•Œ,

1원 : 1

2원 : 1

3원 : 3

4원 : 1+3

5원 : 2+3

6원 : 1+2+3

7원 : 7

8원 : 1+7

9원 : 2+7

10원 : 3+7

11원 : 1+3+7

12원 : 2+3+7

13원 : 1+2+3+7

14원 : X

πŸ“Œ 초기 μ ‘κ·Ό 방법

μ²˜μŒμ— μƒκ°ν•œ μ ‘κ·Ό 방식은 μ–΄λ €μ› λ‹€.

  1. λ™μ „μ˜ λͺ¨λ“  쑰합을 κ΅¬ν•œλ‹€.
  2. μ‘°ν•© 별 μ΅œμ’… 합을 κ΅¬ν•œλ‹€.
  3. μ΅œμ’… 합을 set에 λ‹΄λŠ”λ‹€.

μ—¬κΈ°μ„œ λ¬Έμ œλŠ” λͺ¨λ“  쑰합을 ꡬ할 λ•Œ λ„ˆλ¬΄ λ§Žμ€ λΉ„μš©μ΄ λ“ λ‹€.

Combination μ—°μ‚° μ‹œμ—λŠ” νŒ©ν† λ¦¬μ–Ό λ‹¨μœ„λ‘œ μ—°μ‚°ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

πŸ“Œ 이후 μ ‘κ·Ό 방법

λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘μ˜ 쑰건은 두 가지라고 μƒκ°ν–ˆλ‹€.

  1. κ°€μž₯ μž‘μ€ 동전보닀 μž‘μ€ κΈˆμ•‘
  2. λͺ¨λ“  동전을 λ”ν•œ 것보닀 큰 κΈˆμ•‘

λ”°λΌμ„œ μ˜€λ¦„μ°¨μˆœ 정렬을 μˆ˜ν–‰ν•œ λ’€, λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘μ„ μ¦κ°€μ‹œμΌœλ‚˜κ°„λ‹€.

  1. μ˜€λ¦„μ°¨μˆœ μ •λ ¬ μˆ˜ν–‰
  2. 동전을 ν•˜λ‚˜μ”© κΊΌλ‚Έλ‹€.
  3. κΈˆμ•‘μ΄ 동전보닀 μž‘μœΌλ©΄ stop
  4. κΈˆμ•‘μ΄ 동전보닀 크면, κΈˆμ•‘μ— 동전 값을 λ”ν•œλ‹€.

μ†ŒμŠ€μ½”λ“œ

# Solution
def solution(data):
    target = 1
    for x in data:
        # λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘μ„ μ°Ύμ•˜μ„ λ•Œ 반볡 μ’…λ£Œ
        if target < x:
            break
        target += x

    # λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘ 좜λ ₯
    print(target)