๐๐
์๋ก ๋ค๋ฅธ ์ ์๋ฅผ ์ ๋ ฅ๋ฐ์ ๊ฐ๋ฅํ ๋ชจ๋ ์์ด์ ๋ฆฌํดํ๋ผ
'''
์์ด
์๋ก ๋ค๋ฅธ ์ ์๋ฅผ ์
๋ ฅ๋ฐ์ ๊ฐ๋ฅํ ๋ชจ๋ ์์ด์ ๋ฆฌํดํ๋ผ
Example 1:
Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
Example 2:
Input: nums = [0,1]
Output: [[0,1],[1,0]]
Example 3:
Input: nums = [1]
Output: [[1]]
'''
from typing import List
def permute(nums: List[int]) -> List[List[int]]:
results = []
prev_elements = []
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()
dfs(nums)
return results
print(permute([1, 2, 3]))
๋ค์ ์ด์ dfs(next_elements)
๋ก ๋ฐ๋ก ๊ฐ๊ฒ ๋ฉ๋๋ค.
elements
์๋ ์ ๊ฐ์๊ธฐ 2๊ฐ ์๊ฒผ์๊น์ ?
if len(elements) == 0 :
results.append(prev_elements[:])
๋ก ๋์ด์๋ ๋ถ๋ถ์์ results
์ ๋ํ๊ฒ ๋๊ณ ,
๋ฆฌ์คํธ ์ถ๊ฐ๊ฐ ๋ ๋ค elements
์ ์๋ ์์๊ฐ ์์ผ๋๊น .
๋ค์ ๋ ๋์๊ฐ๊ฒ ๋๋ค.
์ด๋ฐ์์ผ๋ก ๋๋์ ๊ฐ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
prev_elements.pop()
์ ํด์ ์์ ํ๋์ฉ ๋บ๋ค .
๋ฐ๋ณต๋ฌธ์ด 1๋ถํฐ ์์ํ๋๊ฒ์ด ๋ชจ๋ ๋๋ฌ๊ธฐ ๋๋ฌธ์ ์ด์
2 ๊ฐ ์์๋๋ค.
results
์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ , for e in elements:
๋ก ๋ด๋ ค๊ฐ๋ค.
์ฌ๊ธฐ์ ๋ฐ๋ก dfs(next_elements)
๋ก ๋ด๋ ค๊ฐ๊ฒ ๋๋ค.
prev_elements.pop()
์ ํ๊ฒ๋๋ฉด , 3 ์ด ๋น ์ง๊ฒ ๋๋ฉด์ ๋ค์
for e in elements
๋ก ๊ฐ๊ฒ ๋๋ค.
for e in elements
์์ ๋ค์ ๋ฐ๋ก dfs(next_elements)
๋ก ๊ฐ๊ฒ ๋๊ณ
๋ด๋ ค๊ฐ์ prev_elements.pop()
์ด ์คํ์ด ๋๋ฉด์
prev_elements
์ ์๋ 1 ์ด ์ฌ๋ผ์ง๋ฉด์ , ๋ค์
for e in elements
๋ก ๊ฐ๊ฒ ๋๋ค.
์ด์ ๋ค์ ๋ฐ๋ก dfs(next_elements)
๋ก ๋ด๋ ค๊ฐ๊ฒ ๋๋ค.
๋๋ค์ elements
์ ์ด ์๊ฒจ๋ ์ด์ ๋ ??
๋ชจ๋ ์์๋ฅผ ํ์ํํ ๋ค๋ก ๋๋์๊ฐ๊ธฐ ๋๋ฌธ์ ์ด์ ์ํ๋ก ๋์๊ฐ๊ฒ ๋๋ค.
์ด์ ๋ค์ ๋ฐ๋ก dfs(next_elements)
๋ก ๋ด๋ ค๊ฐ๊ฒ ๋๋ค.
์ด์ result ์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ด์ ๋ค์ ์ด์ ์ํ๋ก ๊ณ์ ๋์๊ฐ๊ฒ ๋๋ค.
prev_elements.pop()
์ผ๋ก 1 ์ ์ ๊ฑฐ ํ๊ณ ๋ค์ for e in elements
๋ก ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค.
๋ค์ ์ด์ ์ ์ ์ํ๋ก ๋์๊ฐ๋ค.
prev_elements.pop()
์ผ๋ก ์ธํด์ 2 ๊ฐ ์ฌ๋ผ์ง๋ค.
์ด์ ์ ์ ์ ์ํ๋ก ๋์๊ฐ๊ฒ ๋๊ณ ,
๋ค์ prev_elements.pop()
์ผ๋ก ์ธํด์ 3์ด ์ฌ๋ผ์ง๋ค.
๋.