순열(permutations)
서로 다른 n개의 원소에서 r개를 중복없이 골라 순서대로 나열하는 경우의 수
순열 구현
def permutation(arr,r):
arr = sorted(arr)
used = [0 for _ in range(len(arr))]
def generate(chosen, used):
if len(chosen) == r:
print(chosen)
return
for i in range(len(arr)):
if not used[i]:
chosen.append(arr[i])
used[i] = 1
generate(chosen, used)
used[i] = 0
chosen.pop()
generate([],used)
조합(Combinations)
서로 다른 n개의 원소에서 r개를 뽑는 경우의 수
조합 구현
def combination(arr, r):
arr = sorted(arr)
used = [0 for _ in range(len(arr))]
def generate(chosen):
if len(chosen) == r:
print(chosen)
return
start = arr.index(chosen[-1]) + 1 if chosen else 0
for nxt in range(start, len(arr)):
if used[nxt] == 0 and (nxt == 0 or arr[nxt-1] != arr[nxt] or used[nxt-1]):
chosen.append(arr[nxt])
used[nxt] = 1
generate(chosen)
chosen.pop()
used[nxt] = 0
generate([])
순열, 조합 파이썬 라이브러리
itertools
import itertools
pool = ['A','B','C']
print(list(map("".join, itertools.permutaions(pool, 2)))) # 순열
print(list(map("".join, itertools.combinations(pool, 2)))) # 조합
참고
'Lang > Python' 카테고리의 다른 글
[python] itertools을 사용한 순열과 조합 구하기와 시간복잡도 (0) | 2022.09.30 |
---|---|
[Python] 힙(Heap)과 Python heapq 모듈 활용 (0) | 2022.07.11 |