Greedy-algorithm.md


κ°œλ…

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

  • λ§€μˆœκ°„ κ°€μž₯ μ’‹μ•„λ³΄μ΄λŠ” 것을 μ„ νƒν•˜λ©°, ν˜„μž¬μ˜ 선택이 λ‚˜μ€‘μ— λ―ΈμΉ  영ν–₯에 λŒ€ν•΄μ„œλŠ” κ³ λ―Όν•˜μ§€ μ•ŠλŠ”λ‹€.

  • 사전에 μ™Έμš°κ³  μžˆμ§€ μ•Šμ•„λ„ ν’€ 수 μžˆμ„ κ°€λŠ₯성이 높은 문제 μœ ν˜•

μ˜ˆμ‹œ - κ±°μŠ€λ¦„λˆ 문제

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

문제 풀이

  • κ°€μž₯ 큰 화폐 λ‹¨μœ„ λΆ€ν„° 거슬러 μ£ΌλŠ” 것 500 > 100 > 50 > 10

def solution():
    coin = int(input())
    count = 0
    array = [500, 100, 50, 10]
    for i in array:
        count+=coin // i
        coin %= i
    return count

ν•˜μ§€λ§Œ μœ„μ˜ ν’€μ΄λŠ” 거슬러 쀄 수 μžˆλŠ” λ™μ „μ˜ λ‹¨μœ„κ°€ κ°€μž₯ 큰 κΈˆμ•‘μ΄ λ‚˜λ¨Έμ§€ λ™μ „μ˜ 배수이기 λ•Œλ¬Έμ— κ°€λŠ₯ν•œ 풀이이닀. λ§Œμ•½ ν™”νμ˜ λ‹¨μœ„κ°€ 500, 300, 100, 10 이라면 μœ„μ˜ μ½”λ“œλŠ” 닡이 될 수 μ—†λ‹€.

  • 즉, 각 문제 상황에 맞게 κ°€μž₯ 졜적의 아이디어λ₯Ό λ– μ˜¬λ¦¬κ³  정당성을 ν™•μΈν•˜λŠ” 것이 그리디 μ•Œκ³ λ¦¬μ¦˜μ„ ν‘ΈλŠ” 방법이닀.

그리디 μ•Œκ³ λ¦¬μ¦˜μ˜ μ •λ‹Ήμ„±

λŒ€λΆ€λΆ„μ˜ λ¬Έμ œλŠ” 그리디 μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν–ˆμ„ λ•Œ '졜적의 ν•΄'λ₯Ό 찾을 수 μ—†λŠ” κ°€λŠ₯성이 λ‹€λΆ„ν•˜λ‹€.

  • βœ” μœ„μ—μ„œ λ§ν–ˆλ“―μ΄, 문제 상황에 λ§žλŠ” μ΅œμ†Œν•œμ˜ 아이디어λ₯Ό λ– μ˜¬λ¦¬κ³  이것이 μ •λ‹Ήν•œμ§€ κ²€ν† ν• μˆ˜ μžˆμ–΄μ•Ό ν•œλ‹€.

Last updated