Algorithem
순열 찾기 (python code)
jamong5
2023. 1. 5. 12:31
1. dfs 를 차용한 재귀
알고리즘 : dfs
구현 : 재귀
def dfs(mylist, visited = [], answer = []) :
if len(visited) == len(mylist) :
# answer.append(visited) -> visited의 주소지가 재귀 안에서 공유되어 모든 answer의 원소가 같은 값이 되는 문제 발생.
answer.append(visited.copy())
return answer
for m in mylist :
if m in visited : continue
visited.append(m)
answer = dfs(mylist, visited, answer)
visited.pop()
return answer
<< 알고리즘 모식도 첨부 예정 >>
2. 반복문, 인덱싱, 스위칭
def permute(arr):
result = [arr[:]]
c = [0] * len(arr)
i = 0
while i < len(arr):
if c[i] < i:
if i % 2 == 0:
arr[0], arr[i] = arr[i], arr[0]
else:
arr[c[i]], arr[i] = arr[i], arr[c[i]]
result.append(arr[:])
c[i] += 1
i = 0
else:
c[i] = 0
i += 1
return result
3. itertools 라이브러리 .permutation
import itertools
pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 3개의 원소로 순열 만들기
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2개의 원소로 순열 만들기