작성
·
198
0
import sys
sys.stdin=open("input.txt", "rt")
def DFS(L,M,J,sum):
global cnt
if L<n[0] and M<n[1] and J<n[2]:
if sum>t:
return
elif sum==t:
cnt+=1
return
else:
DFS(L+1,M,J,sum+p[0])
DFS(L,M+1,J,sum+p[1])
DFS(L,M,J+1,sum+p[2])
if __name__=="__main__":
t=int(input())
k=int(input())
p=[]
n=[]
cnt=0
for i in range(k):
a,b=map(int,input().split())
p.append(a)
n.append(b)
DFS(0,0,0,0)
print(cnt)
답변 3
0
0
위 코드는 동전의 종류가 3개일때만 가능한 코드입니다. 접근하는 방향를 수정해야 합니다.
그리고 L값에 대해서도
L=0일때 1개적용
L=1일때 2개적용
L=2일때 3개적용 하고 넘어가면 L은 3이 되어 있습니다. 즉 if L<n[0] and M<n[1] and J<n[2]: 이 상황에서 L=3일때 3개가 적용된 상황입니다. if L<=n[0] and M<=n[1] and J<=n[2]: 해주어야 합니다.
그리고 이 코드는 중복해서 카운팅하는 것을 제거하기가 힘든 코드입니다. 영상에서 제가 설명한 방법으로 했으면 좋겠습니다.
아래 코드를 실행해보시면 위 말들이 느낌이 올겁니다.
import sys
sys.stdin=open("input.txt", "rt")
def DFS(L,M,J,sum):
global cnt
if L<=n[0] and M<=n[1] and J<=n[2]:
if sum>t:
return
elif sum==t:
cnt+=1
print(L, M, J, sum)
return
else:
DFS(L+1,M,J,sum+p[0])
DFS(L,M+1,J,sum+p[1])
DFS(L,M,J+1,sum+p[2])
if __name__=="__main__":
t=int(input())
k=int(input())
p=[]
n=[]
cnt=0
for i in range(k):
a,b=map(int,input().split())
p.append(a)
n.append(b)
DFS(0,0,0,0)
print(cnt)
0