python에서 제공하는 itertools를 사용하면 효율적으로 순열과 조합을 구할 수 있습니다.
1. 조합(combinations)
첫번째 파라미터로 iterable 객체를 받고, 두번째 파라미터는 선택할 원소의 개수를 입력받습니다.
from itertools import combinations
A = [2, 1, 3]
for i in combinations(A, 2):
print(i)
for i in combinations(A, 3):
print(i)
2. combinations_with_replacement
중복을 허용하여 입력받은 iterable 객체 내 원소로 만들 수 있는 모든 조합을 구할 수 있습니다.
from itertools import combinations_with_replacement
A = [2, 1, 3]
for i in combinations_with_replacement(A, 3):
print(i)
3. permutations(순열)
from itertools import permutations
A = [2, 1, 3]
for i in permutations(A, 3):
print(i)
4. product, 데카르트곱
product는 2개 이상의 iterable을 입력으로 받아 순열을 만들 수 있는 함수입니다.
A = [2, 1, 3]
for i in product(A):
print(i)
for i in product(A, repeat=3)
print(i)
product를 사용하면 값의 중복을 허용하면서 순열을 만들 수 있습니다.
또한 product는 두 개 이상의 iterable을 입력값으로 받을 수 있습니다.
A = [2, 1, 3]
B = ['A', 'B']
for i in product(A, B, repeat=1):
print(i)
repeat의 수를 늘려주면 입력받은 iterable들을 repeat만큼 사용하게 됩니다.
A = [2, 1, 3]
B = ['A', 'B']
for i in product(A, B, repeat=2):
print(i)
A = [2, 1, 3]
B = ['A', 'B']
C = ['C', 'D']
for i in product(A, B, C, repeat=1):
print(i)
백트래킹 기초 문제에서도 사용할 수 있고 한 번씩 쓸 일이 있을 때 사용하기 좋습니다.
dfs로 구현할 일이 있을 때 쓰기 유용합니다.
'Python > Syntax' 카테고리의 다른 글
[Python] while ~ else문 (0) | 2023.01.17 |
---|---|
[Python] glob (0) | 2023.01.04 |
[Pandas] pivot (0) | 2022.09.28 |
[Pandas] 빈도표 구하기, 카이제곱검정(crosstab, chi2_contingency) (0) | 2022.09.10 |
[Python] Dictionary 대신 사용할 수 있는 dataclass (0) | 2022.09.10 |