λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/μ•Œκ³ λ¦¬μ¦˜

[Algorithm] 그리디 μ•Œκ³ λ¦¬μ¦˜

1. μ •μ˜

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

일반적인 μƒν™©μ—μ„œλŠ” 졜적의 ν•΄λ₯Ό 보μž₯ν•  수 없을 λ•Œκ°€ λ§Žμ§€λ§Œ, μ½”λ”©ν…ŒμŠ€νŠΈμ—μ„œλŠ” λŒ€λΆ€λΆ„ κ·Έλ¦¬λ””λ‘œ ν’€μ—ˆμ„ λ•Œ 졜적의 ν•΄κ°€ 됨

2. λŒ€ν‘œμ μΈ 그리디 문제

κ±°μŠ€λ¦„λˆ 문제

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

  • 500원, 100원, 50원 10μ›μ§œλ¦¬ λ™μ „μ—μ„œ κ°€μž₯ 큰 화폐 λ‹¨μœ„λΆ€ν„° λˆμ„ 거슬러 μ£ΌλŠ” 것이 졜적의 ν•΄λ₯Ό 보μž₯ν•˜λŠ” 이유?λ§Œμ•½, 800원을 κ±°μŠ¬λŸ¬μ£Όμ–΄μ•Όν•˜λŠ”λ°, 500원, 400원, 100원이라면 졜적의 ν•΄λŠ” 400원 λ‘κ°œμ΄λ‹€.n = 1260 #κ±°μŠ¬λŸ¬μ€˜μ•Όν•  돈 count = 0 #큰 λ‹¨μœ„μ˜ ν™”νŽ˜λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ ν™•μΈν•˜κΈ° array = [500,100, 50, 10] for coin in array: count += n // coin #λͺ« n %=coin #λ‚˜λ¨Έμ§€ print(count)
  • → 500μ›μ§œλ¦¬κ°€ 400원 짜리의 λ°°μˆ˜κ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έ
  • → 가지고 μžˆλŠ” 동전 μ€‘μ—μ„œ 큰 λ‹¨μœ„κ°€ 항상 μž‘μ€ λ‹¨μœ„μ˜ λ°°μˆ˜μ΄λ―€λ‘œ μž‘μ€ λ‹¨μœ„μ˜ 동전듀을 μ’…ν•©ν•΄ λ‹€λ₯Έ ν•΄κ°€ λ‚˜μ˜¬ 수 μ—†κΈ° λ•Œλ¬Έ
n = 1260 #κ±°μŠ¬λŸ¬μ€˜μ•Όν•  돈
count = 0

#큰 λ‹¨μœ„μ˜ ν™”νŽ˜λΆ€ν„° μ°¨λ‘€λŒ€λ‘œ ν™•μΈν•˜κΈ°
array = [500,100, 50, 10]

for coin in array:
	count += n // coin #λͺ«
	n %=coin #λ‚˜λ¨Έμ§€

print(count)

μ‹œκ°„ λ³΅μž‘λ„

ν™”νμ˜ μ’…λ₯˜κ°€ K라고 ν•  λ•Œ, μ†ŒμŠ€μ½”λ“œμ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(K)

λ°˜λ³΅λ¬Έμ€ ν™”νμ˜ 갯수만큼 μ‹€ν–‰

참고자료

https://www.youtube.com/watch?v=5OYlS2QQMPA