๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉ Algorithm/๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜(Greedy algorithm)์ด๋ž€?

by HelloRabbit 2023. 5. 12.
728x90

Goal

1. ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ
2. ์˜ˆ์‹œ ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ

 

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?

๊ทธ๋ฆฌ๋””(Greedy)๋ž€ ๋‹จ์–ด๋Š” ํƒ์š•์ด๋ž€ ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด์„œ ์ฝ”๋”ฉ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์š•์‹ฌ์Ÿ์ด์ฒ˜๋Ÿผ ์ง€๊ธˆ ํ˜„์žฌ ๊ฐ€์žฅ ์ข‹์€ ์„ ํƒ, ๊ฐ€์žฅ ์ตœ์ ์˜ ์„ ํƒ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค! ๋‚˜์ค‘์— ์–ด๋–ป๊ฒŒ ๋˜๋“ ๊ฐ„์— ์ผ๋‹จ์€ ์ œ์ผ ์ตœ์„ ์˜ ์„ ํƒ์„ ๊ณ„์† ํ•ด๋‚˜๊ฐ€๋ฉด์„œ ์ „์ฒด์ ์œผ๋กœ๋„ ๊ทธ๋ƒฅ ์ตœ์ ์˜ ์„ ํƒ์ด์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๋””ํ•œ ๋‹ค๋žŒ์ฅ

 

์˜ˆ์ œ ๋ฌธ์ œ (๋ฐฑ์ค€ 5585๋ฒˆ)

์ž”๋ˆ์„ ์ฃผ๋Š”๋ฐ ๊ฑฐ์Šค๋ฆ„๋ˆ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์— ๋งŒ๋“ค์–ด๋ณด๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ž”๋ˆ์œผ๋กœ๋Š” 500์—”, 100์—”, 50์—”, 10์—”, 5์—”, 1์—”์ด ๋ฌดํ•œ๊ฐœ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

Hint

1. ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์œผ๋ ค๋ฉด ๊ธˆ์•ก์ด ํฐ๊ฑฐ๋ถ€ํ„ฐ ์ฃผ๋ฉด ๋ ๊นŒ ์ž‘์€๊ฑฐ๋ถ€ํ„ฐ ์ฃผ๋ฉด ๋ ๊นŒ?

 

ํ•ด๊ฒฐ

# ๋ฌธ์ œ์—์„œ ์ค€ ์ž…๋ ฅ๊ฐ’์€ ๋‚ด์•ผํ•  ๊ธˆ์•ก์ด๋ฏ€๋กœ 1000์—” ์ง€ํ๋ฅผ ํ•œ์žฅ ์คฌ์„ ๋•Œ ๋ฐ›์„ ์ž”๋ˆ๋ถ€ํ„ฐ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค.
change = 1000 - int(input())

en = [500, 100, 50, 10, 5, 1]
count = 0
# ํฐ ๊ธˆ์•ก๋ถ€ํ„ฐ ์ฑ„์›Œ๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.
for coin in en:
    if coin > change:
        continue
    
    count += change // coin     # ์ฝ”์ธ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    change %= coin              # ์ฝ”์ธ ์ฃผ๊ณ  ๋‚จ์€ ๋‚˜๋จธ์ง€ ๊ธˆ์•ก ๊ตฌํ•˜๊ธฐ

    # ๋”์ด์ƒ ๋‚ผ ๊ธˆ์•ก์ด ์—†์œผ๋ฉด ๋ฉˆ์ถฐ!
    if change == 0:
        break

# ์ž”๋ˆ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
print(count)

 

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด ํฐ ๊ธˆ์•ก๋ถ€ํ„ฐ ์šฐ์„ ์ ์œผ๋กœ ์ฑ„์›Œ๋‚˜๊ฐ€๋‹ค๋ณด๋ฉด ๊ฐ€์žฅ ์ ์€ ๊ฐœ์ˆ˜์˜ ์ž”๋ˆ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋Œ“๊ธ€