알고리즘 - 순열
서로 다른 정수를 입력받아 가능한 모든 순열을 리턴하라.
Input | Output |
---|---|
nums = [1,2,3] | [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] |
Solution (DFS를 활용한 순열 생성)
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
results = []
prev_elements = []
def dfs(elements):
# 리프 노드일 때 결과 추가
if len(elements) == 0:
# prev_elements를 하게되면 결과 값이 추가되는 것이 아니라
# prev_elements에 대한 참조가 추가되고 참조된 값이 변경될 경우 같이 바뀐다.
# 따라서 값을 복사하는 형태로 참조 관계를 잦지 않도록 처리해야한다.
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()
dfs(nums)
return results
Solution (itertools 모듈 사용)
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
return list(itertools.permutations(nums))
댓글남기기