DFS에서 조금 응용하여 만약 반복문에서 돌고 있는 리스트의 인덱스 번호가 N보다 큰 값이라면 종료.
def dfs(i, SUM):
global cnt
if i >= N:
return
SUM += n_list[i]
if SUM == S :
cnt += 1
dfs(i+1, SUM-n_list[i])
dfs(i+1, SUM)
N,S = map(int, input().split())
n_list = list(map(int, input().split()))
cnt = 0
dfs(0,0) #index 번호도 처음은 0이고, 처음 더한 값도 0이기 때문
print(cnt)
재귀함수로 처음 dfs 를 다시 호출할 때 어떻게 해야할지 막막했다.
합을 다시 구해야하기 때문에 SUM-n_list[i]를 추가함
백트래킹과 DFS의 차이점은 알았다. 하지만 백트래킹을 DFS와 다르게 어느시점에 구현해야하는지 잘 모르겠다.
DFS로 구현했다가 시간 초과가 나면 바로 BFS 로 해보고 BFS로 해도 시간초과 오류가 뜨면 백트래킹으로 해야하는 걸까 ?
ㅜㅜ 어렵다