반응형
파이썬 iterable 의 원소로 순열과 조합을 구한다.
permutation
순열이란 몇 개를 골라 순서를 고려해 나열한 경우의 수를 의미한다. 즉, 서로 다른 n 개 중에 r 개를 골러 순서있게 나열하는 가짓수 이다.
순열은 순서를 고려한다.
예)
1,2,3 의 숫자가 적힌 카드가 있을 때, 이 중 두 장을 꺼내는 경우의 수 → 12, 13, 21, 23, 31, 32
'A','B','C' 로 만들 수 있는 경우의 수 → 'ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'
itertools.permutation
을 이용하면 for 문을 사용하지 않고 순열을 구할 수 있다.import itertools pool =['A','B','C'] print(list(map(''.join, itertools.permutations(pool)))) # 3 개의 원소로 수열 만들기 print(list(map(''.join, itertools.permutations(pool,2)))) # 2 개의 원소로 수열 만들기 arr = ['A','B','C'] nPr = itertools.permutations(arr,2) print(list(nPr)) #결과 : [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
combination
조합이라는 것은 순서를 고려하지 않고 서로다른 n 개 중에 r 개를 취해 조를 만들떄, 하나하나의 조를 n개 중에서 r개를 취한 조합이라고 생각하자.
조합은 순서를 고려하지 않기 때문에 [A, B, C]의 리스트에서 2개의 원소를 골라 나열하면
[(A, B), (A, C), (B, C)] 가 나오게 된다. 조합은 (A, B)와 (B, A)는 같은 것으로 취급한다.
import itertools arr = ['A','B','C'] nCr = itertools.combinations(arr,2) print(list(nCr)) 결과 : [('A', 'B'), ('A', 'C'), ('B', 'C')]
반응형
'알고리즘' 카테고리의 다른 글
BFS 와 DFS 개념 (0) | 2020.09.23 |
---|---|
백준 2775번: 부녀회장이 될테야 파이썬 (broz 2) (0) | 2020.09.23 |
백준 10250번 ACM 호텔 ( bronz 3) (0) | 2020.09.23 |
종만북 6-3 소풍 파이썬 (0) | 2020.09.23 |
완전탐색(Brute-force Search) + 백준 1018 체스판 다시 칠하기 + 백준 1182 부분집합의 합 (0) | 2020.08.28 |