티스토리 뷰
python에는 너무 유용한 내장 함수가 많이 있는데,
그 중에서도 경우의 수를 구할 때 사용되는 내장 함수를 다뤄보겠다.
경우의 수는 전체 탐색이 필요한 알고리즘 문제에서 은근 자주 쓰이므로 기억해둘 것!
경우의 수를 구할 땐 itertools라는 모듈을 활용한다.
import itertools
순열
서로 다른 n개 중에서 r개를 '순서'대로 나열하는 경우의 수
# 배열 ['1','2','3','4'] 중에서 서로 다른 원소 두 개를 순서대로 나열하는 경우의 수를 출력한다.
itertools.permutations(['1','2','3','4'], 2)
중복순열
중복 가능한 n개 중에서 r개를 '순서'대로 나열하는 경우의 수
# 배열 ['1','2','3','4'] 에서 중복 가능한 원소 두 개를 순서대로 나열하는 경우의 수를 출력한다.
itertools.product((['1','2','3','4']), repeat=2)
조합
서로 다른 n개 중에서 r개를 순서에 상관 없이 나열하는 경우의 수
# 배열 ['1','2','3','4'] 중에서 서로 다른 원소 두 개를 순서 상관없이 나열하는 경우의 수를 출력한다.
itertools.combinations(['1','2','3','4'], 2)
중복조합
중복 가능한 n개 중에서 r개를 순서에 상관 없이 나열하는 경우의 수
# 배열 ['1','2','3','4'] 중에서 중복 가능한 원소 두 개를 순서 상관없이 나열하는 경우의 수를 출력한다.
itertools.combinations_with_replacement(['1','2','3','4'], 2)
알고리즘 문제에 따라 적절하게 사용되는 경우의 수가 다르므로 각각의 특징까지 잘 익혀두자.
코딩테스트... 파이팅...
'알고리즘 기록' 카테고리의 다른 글
[Algorithm] Dijkstra 알고리즘에 대해 알아보자 (0) | 2022.03.27 |
---|---|
[Algorithm] 너비우선탐색(BFS), 깊이우선탐색(DFS) (0) | 2021.04.13 |
[Algorithm] 그래프 (Graph) (0) | 2021.04.12 |
[Algorithm] 동적 계획법(dynamic programming) (0) | 2021.04.09 |