1) 순열
def permutations(arr, k):
cases = []
visited = [False]*(len(arr))
def dfs(elements):
if len(elements) == k:
cases.append(elements)
return
for i in range(len(arr)):
if not visited[i]:
visited[i] = True
dfs(elements + [arr[i]])
visited[i] = False
dfs([])
return cases
print(permutations([1,2,3],2)) # [[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]
2) 중복순열
def permutation_with_repet(arr, k):
cases = []
def dfs(elements):
if len(elements) == k:
cases.append(elements)
return
for i in range(len(arr)):
dfs(elements + [arr[i]])
dfs([])
return cases
print(permutation_with_repet([1,2,3],2)) # [[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]
3) 조합
def combinations(arr, k):
cases = []
def dfs(elements,index):
if len(elements) == k:
cases.append(elements)
return
for i in range(index+1,len(arr)):
dfs(elements + [arr[i]],i)
dfs([],-1)
return cases
print(combinations([1, 2, 3], 2)) # [[1, 2], [1, 3], [2, 3]]
4) 중복조합
def combinations_with_repet(arr, k):
cases = []
def dfs(elements,index):
if len(elements) == k:
cases.append(elements)
return
for i in range(index,len(arr)):
dfs(elements + [arr[i]],i)
dfs([],0)
return cases
print(combinations_with_repet([1,2,3],2)) # [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]
'Programming 💻 > Python' 카테고리의 다른 글
[Python] 2차원 배열 90/180/270도 회전 구현 코드 (3) | 2024.10.13 |
---|---|
[Python] 문자열 대문자 및 소문자 변환 함수(upper / capitalize / title / lower / swapcase) (1) | 2024.01.05 |
[Python] 아스키코드(Ascii Code) 관련 함수 ord / chr (0) | 2024.01.05 |
[Python] collections 모듈의 Counter 사용법 (1) | 2023.10.07 |
[Python] Hash 자료형(사전 자료형) 정리 (0) | 2023.10.05 |