해결된 질문
작성
·
162
·
수정됨
1
강사님, 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문을 넣어서 내가 지금 어느 위치에 있는지를 궁금한 부분에 넣어서 확인하시면 도움이 될거에요~!