본문 바로가기

코딩테스트

[Python] 순열과 조합 ( permutation, combination )

순열 (permutation)

 

서로 다른 n개중 r개를 골라 순서를 정해 나열하는 가짓수를 의미한다. nPr 로 표기한다. 

순서를 고려하기 때문에 만약 [A, B, C] 리스트가 있다면 [(A,B), (A,C), (B, C), (B, A), (C, A), (C, B)]가 나오게 된다. 요소가 동일 하더라도 순서가 다르면 다른 것으로 친다.

 

*순서를 고려하며 중복은 허용하지 않는다.

 

nPr = n! / (n-r)!

 

python의 모듈 itertools를 통해 사용 가능하다. 

from itertools import permutations
arr = ['a','b','c']
for i in permutatinos(arr,2):
	print(i)

 

단순 import permutations일 경우 사용시 itertools.permutations(arr,2)이렇게 사용해야 한다.

총 가짓수를 구하기 위해서는 다음과 같이 사용하면 된다.

print(len(list(permutations(arr,2))))

객체의 쌍을 리스트로 변환해 그 길이를 구한 것이다.


조합 (combination)

서로 다른 n개에서 r개를 선택할 때 순서를 고려하지 않고, 중복없이 뽑을 경우의 수를 의미한다.

 

*순서 고려 X , 중복 허용 X

 

nCr = n! / (n-r)! r!

 

마찬가지로 모듈 itertools를 통해 임포트 한다.

from itertools import combinations
arr = ['a','b','c']
for i in combinations(arr,2):
	print(i)

 

순열과 동일하게 총 가짓수를 구할 수 있다.

print(len(list(combinations(arr,2))))

이 두개는 전부 리턴 값이 객체가 되며 경우의 수에 대한 쌍을 튜플 형식으로 반환한다. ex) ('a', 'b')

그렇기 때문에 list() 나  tuplie()형식으로 변경해주는 것이 좋다. 단순 출력시 주소에 있는 객체라고만 나오기 때문에 원하는 값을 직접 보고 싶다면 형태를 바꿔줘야한다.

'코딩테스트' 카테고리의 다른 글