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개의 원소로 순열 만들기
'Algorithem' 카테고리의 다른 글
최장 증가 부분 수열 (LIS) : 수열 길이마다 최대값 갱신 (0) | 2023.01.05 |
---|---|
거대한 피보나치 수열 : 행렬 곱으로 표현하기 (0) | 2023.01.05 |
n, m 수열 만들기 (0) | 2023.01.05 |
Union Find 와 서로소 집합(Disjoint Set) (0) | 2023.01.05 |
알고리즘의 이해 (0) | 2023.01.05 |
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개의 원소로 순열 만들기
'Algorithem' 카테고리의 다른 글
최장 증가 부분 수열 (LIS) : 수열 길이마다 최대값 갱신 (0) | 2023.01.05 |
---|---|
거대한 피보나치 수열 : 행렬 곱으로 표현하기 (0) | 2023.01.05 |
n, m 수열 만들기 (0) | 2023.01.05 |
Union Find 와 서로소 집합(Disjoint Set) (0) | 2023.01.05 |
알고리즘의 이해 (0) | 2023.01.05 |