[파이썬] 그리디 알고리즘의 응용과 예시
그리디 알고리즘은 최적해를 구하는데 사용되는 알고리즘 중 하나입니다. 그리디 알고리즘은 현재 상태에서 가장 최선의 선택을 하는 방식으로 문제를 해결합니다. 매 순간의 최적 선택이 전체적인 최적해를 도출하는 것을 목표로 합니다.
그리디 알고리즘은 항상 최적해를 보장하는 것은 아니지만, 많은 경우 최적해에 근사한 값을 구할 수 있습니다. 따라서, 문제의 특성에 따라 적절히 활용할 수 있습니다.
그리디 알고리즘 응용 예시: 거스름돈 문제
거스름돈 문제는 그리디 알고리즘을 사용하여 해결할 수 있는 대표적인 예시입니다. 주어진 금액을 가장 적은 동전의 개수로 거슬러주어야 합니다.
문제 설명
입력으로 받는 돈의 액수는 1 이상의 자연수이며, 동전의 종류는 1원, 5원, 10원, 50원, 100원, 500원이 주어집니다. 가장 적은 동전의 개수로 거스름돈을 줄 수 있는 방법을 찾아 출력해야 합니다.
구현 방법
def calculate_change(money):
coins = [500, 100, 50, 10, 5, 1] # 동전의 종류
change = [] # 거스름돈 동전 개수를 저장할 리스트
total = 0 # 거슬러준 동전의 총 개수
for coin in coins:
count = money // coin # 해당 동전으로 거슬러줄 수 있는 최대 개수 계산
total += count # 총 동전 개수에 추가
money -= coin * count # 거슬러준 금액 제외
change.append(count) # 거스러준 동전 개수 리스트에 추가
return total, change
# 실행 예시
total_coin, coin_count = calculate_change(1230)
print("Total coins:", total_coin)
print("Coin count:", coin_count)
실행 결과
Total coins: 8
Coin count: [2, 2, 0, 3, 1, 0]
위 예시 코드에서는 입력으로 받은 돈을 가장 큰 동전부터 거슬러주며, 해당 동전의 개수를 리스트에 저장합니다. 마지막으로 거슬러준 총 동전의 개수와 각 동전별 개수를 출력합니다.
그리디 알고리즘을 사용하여 거스름돈 문제를 해결하면 최적해를 구하는데 효율적인 방법을 선택할 수 있습니다. 하지만, 동전의 종류가 바뀌거나 다양한 경우의 수가 추가되었다면 그리디 알고리즘으로는 최적해를 보장할 수 없을 수도 있습니다. 따라서, 그리디 알고리즘을 적용할 때는 문제의 특성에 주의하여 적절한 선택을 해야 합니다.