완전탐색 - 구현(순열) 질문
강사님, nums 1234로 만들수 있는 모든 순열을 반환하시오 문제에서 질문이 있습니다.
curr = []라고 지정하지 않았는데 어디에서 갑자기 curr이 빈리스트로 자동적으로 생성된건가요?
curr이랑 nums 개수 같으면 answer에 순열 추가되고 함수종료되는건 알겠는데 curr가 [1, 2, 3, 4]일때 재귀함수 종료되고 다음 curr.pop()로 넘어가서 [1, 2, 3]이 되는거까진 이해갔습니다. 넘어가는 순간 또 재귀함수가 종료되서 curr.pop()이 되서 [1, 2]가 되는건 알겠는데 갑자기 3, 4만 빠진 여기에서 멈추게 되는 것이 이해가 가지 않습니다. 여기에서 멈춰서 다시 4, 3으로 진행되는게 이해가 안가서요ㅠㅠ 1, 2도 전부 이전의 재귀함수가 종료된 것이니 pop이 되어야 되는거 아닌가요?ㅠㅠ
for문 안의 재귀함수가 종료될시 어디로 돌아가는지가 약한거 같은데 이부분 공부하는 방법이 있으까요?
답변 1
1
안녕하세요, oldcar27님
답변 드릴게요
backtrack([]) 여기서 빈 배열을 건네줬기 때문에 curr는 빈 배열이 할당되게 됩니다.
일단 잘 이해하셨네요. "
[1, 2]가 되는건 알겠는데" 라고 말씀해주셨잖아요. 그러면 지금 어느 상황인지를 알고 계셔야 합니다.
아까 [1,2] 인 상황에서
for num in nums:해당 코드를 통해 [1,2,1] , [1,2,2] , [1,2,3] , [1,2,4]를 모두 해봐야 하는거에요.
그런데
if num not in curr:이 코드 때문에 [1,2,1] , [1,2,2] , [1,2,3] , [1,2,4] 앞에 두 케이스는 생략되는거고,
[1,2,3] , [1,2,4] 중에서 [1,2,3] , [1,2,4] 빨강색 부분을 실행했던거죠. 근데 이젠 pop()이 다 되어 다시 [1,2]인 상황으로 온것이고, 이제 [1,2,3] , [1,2,4] 이 뒷부분을 실행해야되는 상황인거죠.
[1,2,4]까지 다 완료해야만 [1,2]에서 [1]로 pop이 되는 겁니다.
순열, 조합, 부분집합을 디버깅을 통해서 하나하나 실행해보세요. 아니면 순열조합부분집합 코드에서 중간중간에 print문을 넣어서 내가 지금 어느 위치에 있는지를 궁금한 부분에 넣어서 확인하시면 도움이 될거에요~!
노션 공유 링크
0
87
2
수업 중간에 내주신 문제는 해답을 알 수 없는걸까요?
0
77
2
최신 강의와 비교
0
85
2
Min Cost Climbing stairs 질문
0
76
2
노션 공유 부탁드립니다!
1
88
2
for 문에 sort 함수 를 사용하면
1
90
2
노션 공유 부탁드립니다.
0
104
2
디스코드가 올바르지 않다고 뜹니다..!
0
107
1
그래프
0
98
2
노션 공유
1
123
2
시간복잡도 질문
2
125
3
11강 질문
1
78
2
노션 공유 부탁드립니다
0
84
2
linkedList - BrowserHistory 코드 질문
0
76
1
list1.append(list2)와 list1.append(list2[:])의 차이가 무엇인가요?
1
168
1
라이브러리 사용
1
136
2
문제 교재는 따로 없는 거 맞나요?
1
202
2
LCA 관련해서 질문이 있습니다.
1
118
2
[Unique Paths] 완전탐색 / DP (후반부)
0
108
1
dp 계단오르기최소비용질문입니다.
0
109
1
Dynamic Array 의 size 정보가 저장되는 곳
2
161
2
노션공유가 안된듯 합니다
1
163
2
[코테 적용] 👉 [3번 문제] 완전탐색 (DFS, BFS) (전반부)
1
122
1
강의자료 만들 때 사용하신 프로그램이 뭘까요?
1
203
1





