πŸ“šΒ κ·Έλ¦¬λ”” (Greedy) μ•Œκ³ λ¦¬μ¦˜

β€˜ν˜„μž¬ μƒν™©μ—μ„œ μ§€κΈˆ λ‹Ήμž₯ 쒋은 κ²ƒλ§Œ κ³ λ₯΄λŠ” 방법’

λ§€ μˆœκ°„ κ°€μž₯ μ’‹μ•„λ³΄μ΄λŠ” 것을 선택 β‡’ ν˜„μž¬μ˜ 선택이 λ‚˜μ€‘μ— λ―ΈμΉ  영ν–₯은 κ³ λ € μ•ˆν•¨

β€˜μ‚¬μ „μ— μ™Έμš°κ³  μžˆμ§€ μ•Šμ•„λ„ ν’€ 수 μžˆμ„ κ°€λŠ₯성이 높은 문제 μœ ν˜•β€™

μ •λ ¬, μ΅œλ‹¨ 경둜 λ“±μ˜ μ•Œκ³ λ¦¬μ¦˜ μœ ν˜•μ€ μ‚¬μš© 방법을 μ •ν™•νžˆ μ•Œκ³  μžˆμ–΄μ•Ό 함

  • 그리디 μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜κ³Ό 같은 특이 μΌ€μ΄μŠ€λ₯Ό μ œμ™Έν•˜κ³ λŠ” λ‹¨μˆœ μ•”κΈ°λ₯Ό 톡해 λŒ€μ²˜ν•˜κΈ΄ μ–΄λ ΅
  • β€œμ°½μ˜λ ₯β€Β μš”κ΅¬ν•˜λŠ” 문제 μœ ν˜• β‡’ 문제λ₯Ό ν’€κΈ° μœ„ν•œ μ΅œμ†Œν•œμ˜ 아이디어λ₯Ό λ– μ˜¬λ¦΄ 수 μžˆλŠ” λŠ₯λ ₯ μš”κ΅¬
  • λ¬Έμ œμ—μ„œ β€˜κ°€μž₯ 큰 μˆœμ„œλŒ€λ‘œβ€™, β€˜κ°€μž₯ μž‘μ€ μˆœμ„œλŒ€λ‘œβ€™ 같은 기쀀을 μ•Œκ²Œ λͺ¨λ₯΄κ²Œ μ œμ‹œ
  • λŒ€μ²΄λ‘œΒ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜κ³Ό 짝을 이뀄 좜제됨

πŸ“ƒ [예제 1] κ±°μŠ€λ¦„λˆ

  • ν’€μ΄μ‹œκ°„ : 15λΆ„
  • λ¬Έμ œν’€μ΄

[문제]

당신은 μŒμ‹μ μ˜ 계산을 λ„μ™€μ£ΌλŠ” 점원이닀. μΉ΄μš΄ν„°μ—λŠ” κ±°μŠ€λ¦„λˆμœΌλ‘œ μ‚¬μš©ν•  500원, 100원, 50원, 10μ›μ§œλ¦¬ 동전이 λ¬΄ν•œνžˆ μ‘΄μž¬ν•œλ‹€κ³  κ°€μ •ν•œλ‹€. μ†λ‹˜μ—κ²Œ 거슬러 μ€˜μ•Ό ν•  돈이 N원일 λ•Œ κ±°μŠ¬λŸ¬μ€˜μ•Ό ν•  λ™μ „μ˜ μ΅œμ†Œ 개수λ₯Ό κ΅¬ν•˜λΌ. 단, 거슬러 μ€˜μ•Ό ν•  돈 N은 항상 10의 λ°°μˆ˜μ΄λ‹€.

n = 1260
count = 0

# 큰 λ‹¨μœ„μ˜ 화폐뢀터 μ°¨λ‘€λŒ€λ‘œ 확인list = [500, 100, 50, 10]

for coin in list:
    count += n // coin# ν•΄λ‹Ή ν™”νλ‘œ 거슬러 쀄 수 μžˆλŠ” λ™μ „μ˜ 개수 μ„ΈκΈ°
    n %= coin

print(count)

ν™”νμ˜ μ’…λ₯˜λ§ŒνΌ λ°˜λ³΅μ„ μˆ˜ν–‰ =>Β μ‹œκ°„ λ³΅μž‘λ„Β O(K)

이 μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ”Β λ™μ „μ˜ 총 μ’…λ₯˜μ—λ§Œ 영ν–₯을 λ°›κ³ Β κ±°μŠ¬λŸ¬ μ€˜μ•Ό ν•˜λŠ” κΈˆμ•‘μ˜ ν¬κΈ°μ™€λŠ” λ¬΄κ΄€ν•˜λ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€.

  • μ •λ‹Ήμ„± 확인

κ°€μ§€κ³  μžˆλŠ” 동전 μ€‘μ—μ„œΒ κ°€μž₯ 큰 λ‹¨μœ„κ°€ 항상 μž‘μ€ λ‹¨μœ„μ˜ λ°°μˆ˜μ΄λ―€λ‘œ μž‘μ€ λ‹¨μœ„μ˜ 동전듀을 μ’…ν•©ν•΄ λ‹€λ₯Έ ν•΄κ°€ λ‚˜μ˜¬ 수 μ—†λ‹€.

λ§Œμ•½ μ„œλ‘œ λ°°μˆ˜ν˜•νƒœκ°€ μ•„λ‹ˆλΌ λ¬΄μž‘μœ„λ‘œ μ£Όμ–΄μ§„ 경우 κ·Έλ¦¬λ””μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ ν•΄κ²° X => λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œ ν•΄κ²°

ex) ν™”νλ‹¨μœ„κ°€ 500, 400, 100 이고 800원을 거슬러 μ€˜μ•Όν•¨.

  • 그리디 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ ν’€μ—ˆμ„ λ•Œ : 500원 + 100원 + 100원 + 100원
  • 졜적의 ν•΄ : 400원 + 400원

λŒ“κΈ€λ‚¨κΈ°κΈ°