Notice
Recent Posts
Recent Comments
Link
꾸준하게 거북이처럼
동전바꿔주기 본문
def DFS(L,sum):
global cnt
if sum > T:
return
if L == k:
if sum == T:
cnt += 1
else:
for i in range(cn[L] + 1):
DFS(L+1, sum + (cv[L] * i))
if __name__ == "__main__":
T = int(input())
k = int(input())
cv = list()
cn = list()
for i in range(k):
a, b = map(int,input().split())
cv.append(a)
cn.append(b)
cnt = 0
DFS(0,0)
print(cnt)
# T 원을 거스름 돈으로 주려고 한다. 동전 종류가 k개이고, 각 동전 금액 cv 와 각 동전 개수 cn 배열에 입력을
# 받고 T원을 줄 수 있는 모든 경우의 수를 구하자
# 거스름 돈을 만들 때, 5원 10원 1원 이 세개 종류가 있고 각각 3개, 2개, 5개 가 있다고 하자
# 그러면 5원은 0원 ~ 3개까지 사용가능하고, 10원도 0원에서 2개까지, 1원은 0개에서 5개 까지 쓸 수 있고
# 이 개수를 몇 개 쓸 지 골라내어 20원이 되게 만들면 되는 것이다.
# 트리는 0원 부터 시작해서 첫 레벨은 5원부터 0개 ~ 3개사용했을 때 금액으로 더하며 가지를 뻗어나간다.
# 그 다음 레벨은 다시 10원을 0개 ~ 2개 사용했을 때 뻗어나가고 .. 반복.
트리 구조를 그리면 아래와 같다
'Algorithm 문제 & 공부 > DFS' 카테고리의 다른 글
백준 사다리조작 (0) | 2023.07.21 |
---|---|
백준 16929번 Two Dots 파이썬 (0) | 2022.10.23 |
양쪽저울문제 (0) | 2022.06.26 |
휴가 - 삼성 SW 역량 테스트 문제 (0) | 2022.06.25 |
DFS활용 - 최대점수 구하기 (0) | 2022.06.25 |
Comments