Algorithm/Python
[Python] 순열과 조합 (permutations & combinations)
채소기
2023. 9. 17. 21:11
순열이란 서로 다른 n개의 원소에서 r개를 중복없이 순서를 고려하여 선택 혹은 나열하는 것을 의미한다.
파이썬에서는 itertools를 이용하면 순열 내장함수인 permutations를 사용할 수 있다.
하나의 리스트에서 r개의 원소를 선택하여 나열하는 방법과, 모든 원소를 순서를 고려하여 나열하는 방법 2가지가 있다.
하나의 리스트에서 r개의 원소를 선택하여 나열하는 방법
len() 함수를 사용하면 개수까지 구할 수 있다. 다음의 코드는 N개의 원소 중 2개의 원소를 선택하는 경우다. 확인해보자.
import itertools
A = list(map(int, input().split()))
nPr = list(itertools.permutations(A, 2))
print(nPr)
print(len(nPr))
1 4 5 2
[(1, 4), (1, 5), (1, 2), (4, 1), (4, 5), (4, 2), (5, 1), (5, 4), (5, 2), (2, 1), (2, 4), (2, 5)]
12
하나의 리스트에서 모든 원소를 순서를 고려하여 나열하는 방법
이 방법은 다음과 같이 반복문에서 활용할 수 있다.
import itertools
A = list(map(int, input().split()))
for perm in itertools.permutations(A):
print(perm)
1 4 2
(1, 4, 2)
(1, 2, 4)
(4, 1, 2)
(4, 2, 1)
(2, 1, 4)
(2, 4, 1)
두 개의 배열 A, B 에서 각각의 배열의 원소에 대한 모든 곱의 값을 구할 때 이용할 수 있다. (단, K번째 원소를 선택했다면 그 다음엔 K번째 원소를 선택할 수 없는 상황)
조합도 사용법이 같다. permutations 대신 combinations를 사용하면 된다.