<aside> 💡 순열 링크

</aside>

문제 정리

<aside> 💡 서로 다른 정수를 입력받아 가능한 모든 순열을 리턴하라!

</aside>

예시)
Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

어려운 점

<aside> 💡 저번 문제와 비슷하게 어떤식으로 dfs탐색을 해야할지 아이디어가 안떠오른다..

</aside>

접근 방법

<aside> 💡 1. 입력값을 토대로 반복을 진행한다.

  1. 입력값을 순서대로 돌아 현재 값 기준으로 next와 prev로 나눈다.
  2. 이때 재귀함수를 호출해서 prev에 다음 값들을 붙혀나가는 식으로 반복한다.
  3. 중복값도 상관없기 때문에 따로 인덱스를 조작하지는 않는다. </aside>

코드 진행

<aside> 💡 1. 결과값과 이전값을 저장할 리스트를 생성해주고 입력값을 dfs함수에 전달하여 실행한다.

</aside>

def permute(nums):
    results = []
    prev_elements = []

    dfs(nums)
    return results

<aside> 💡 2. 인자인 elements가 아무 값이 없으면 결과에 추가시킨다.

다음 코드에서 알아보겠지만 반복문을 돌며 다음값을 줄여나가는 식으로 반복한다.

</aside>

<aside> 🔥 여기서 중요한점이 prev_elements[:]로 결과값을 추가했다는 점이다.

파이썬은 모든 객체를 참조하는 형태로 처리되기 때문에 [:]를 하지 않으면 결과 값이 추가되는게 아니라

prev_elements에 대한 참조가 추가되어 참조된 값이 변경될 경우 같이 바뀌어 버리게 된다.

</aside>

def dfs(elements):
        if len(elements) == 0:
            results.append(prev_elements[:])