순열(순서의 나열)
- 서로 다른 n 개 중 r 개를 골라 순서를 정해 나열하는 가짓수
- 순서상관 o -> (A, B)와 (B, A)는 다른 것
- Permutation
import itertools
arr = ['A', 'B', 'C']
per = itertools.permutations(arr, 2)
print(list(per))
결과 : [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
DFS 방식을 사용해서 순열을 구할 수도 있다
def _DFS(L):
global cnt
if L==m:
for j in range(L):
print(res[j],end=' ')
print()
cnt+=1
else:
for i in range(1,n+1):
if ch[i]==0:
ch[i]=1
res[L]=i
_DFS(L+1)
ch[i]=0
n,m=3,2
res=[0]*n
ch=[0]*(n+1)
cnt=0
_DFS(0)
print(cnt)
조합
- 서로 다른 n개 중에서 r개를 선택
- 순서고려x -> (A, B)와 (B, A)는 같은 것으로 취급
import itertools
arr = ['A', 'B', 'C']
com = itertools.combinations(arr, 2)
print(list(com))
결과 : [('A', 'B'), ('A', 'C'), ('B', 'C')]
DFS 방식을 사용한 조합 구현
def DFS(L,s):
global cnt
if L==m:
for j in range(L):
print(res[j],end=' ')
cnt+=1
print()
else:
for i in range(s,n+1):
res[L]=i
DFS(L+1,i+1)
n,m=4,2
res=[0]*(n+1)
cnt=0
DFS(0,1)
print(cnt)
순열과 조합은 튜플형태이기 때문에 경우에 따라 리스트로 변환하여 사용해도 된다
반응형
'BackEnd > 파이썬' 카테고리의 다른 글
[파이썬] xml to csv, xml형식을 데이터프레임으로 변환 (0) | 2023.05.27 |
---|---|
[파이썬] 파이썬 코드로 excel 파일 암호화해서 저장하기 (0) | 2023.05.23 |
파이썬 정규표현식 괄호 내부 문자 추출하기 (0) | 2023.04.07 |
[파이썬] 개발툴에서 파이썬으로 엑셀 작업하기 (0) | 2023.02.23 |
정규표현식 (0) | 2023.02.16 |
댓글