본문 바로가기

Algorithm/Python

[Python] 순열과 조합 (permutations & combinations)

순열이란 서로 다른 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를 사용하면 된다.