문제링크

https://leetcode.com/problems/permutations/

문제 정리

입력값 : 서로 다른 정수를 입력받는다.

출력값 : 가능한 모든 순열을 리턴한다.

예시)
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> 💡 순열 문제는 코딩테스트에 자주 나오는 문제로 꼭 알아두면 좋다고한다.일단 이문제는 혼자 해결하지 못했다. 아직까지도 재귀함수를 작성하는데 어려움이 많다.

</aside>

풀이

  1. 재귀방식으로 풀이한다.

    다음값 (next), 이전값 (prev)를 지정해서 트리의 끝까지 향해간다.

    종료 조건은 트리의 끝에 다다를 경우 즉, 재귀함수로 넘겨받는 인자가 없을때이다.

    dfs방식으로 반복한다.

    Untitled

    def dfs(elements):
            # 넘겨받은게 없으면 이전값을 결과값에 넣기
            if len(elements) == 0:
                results.append(prev_elements[:])
    
            for e in elements:
                next_elements = elements[:]
                next_elements.remove(e)
    
                prev_elements.append(e)
                dfs(next_elements)
                prev_elements.pop()