room = []
res = [0]*M
def dfs(v,total):
if v==M:
if total == N:
res_ = [x for x in res]
for i in range(len(res_)):
if res_[i]>capacity[i]:
return
room.append(res_)
## room.append(res)
## 이렇게 하니 맨마지막 경우의 수의 res만 append되었다.
return
elif total>N:
return
else:
for n in range(N+1):
res[v] = n
dfs(v+1,total+n)
dfs(0,0)
N개중 M개를 뽑는 경우의 수를 찾는 DFS를 하던중,
M개를 선택하고 나면 선택했던 요소들을 res에 담아 최종 room 리스트에 담으려고 코드를 작성했다.
처음엔 room.append(res)로 코드를 작성했는데, room의 결과를 출력해보니, 똑같은 res ([10,0,0]) 가 여러번 room 리스트에 append 되어있었다.
그래서 조건에 만족할때 res를 print출력해보니 또 출력결과는 제대로 된 경우의수가 출력되었다.
한참을 고생하다가 원인을 알아냈는데, 내가 room에 append하고 있었던 res리스트는 하나의 객체여서(하나의 메모리 주소) room에 append된 res들은
res값이 바뀔때마다 다같이 똑같이 바뀌고 있었던 것이다..
결국 메모리 주소를 달리하는 다른 객체에 res를 복사해서 append해주니 제대로된 결과가 나왔다..