스터디/알고리즘
거스름돈(dp)
세졍
2024. 6. 23. 20:33
문제이해
n원을 만들려고 할때 money로 만들수 있는 방법의 수 구하기
dp(동적계획법)
1. dp[i]는 i원을 만드는 방법의 수
def solution(n, money):
# dp 배열 초기화, 0부터 n까지 저장
dp = [0] * (n + 1)
dp[0] = 1 # 0원을 만드는 방법은 1가지
# 각 동전에 대해서
for coin in money:
# dp 배열을 업데이트
for i in range(coin, n + 1):
dp[i] += dp[i - coin]
return dp[n]
# 예제 입력
n = 5
money = [1, 2, 5]
print(solution(n, money)) # 출력: 4
<거스름돈 주기>
amount = 123 # 거스름돈
m = [1,10,50,100] # 화폐 단위
사용할 화폐를 최소화해서 -> 화폐단위를 내림차순
거스름돈 거슬러주기
사용할 화폐를 담은 리스트 반환
def solution(amount):
m = [1,10,50,100]
m.sort(reverse=True) # 내림차순하기
change = [] # 사용한 화폐담는 리스트 (답이될 리스트)
for coin in change:
if amount >= coin:
change.append(coin)
amount -= coin
return change
<예산>
1. 가치같은 개념이 없음 그냥 최대한 많은 부서에 예산을 나눠주기
2. 예산리스트를 오름차순해서 하나씩 세기
def solution(d,budget):
d.sort()
answer = 0
for i in d:
if i > budget: # 오름차순이므로 예산보다 크면 뒤에는 볼필요 없음
break
budget -= i
answer += 1
return answer
d = [2,2,3,3]
budget = 10
print(solution(d,budget))