이 글은 Velog에서 이전한 글입니다. Velog 원문 보기
⭐️ 서론
알고리즘 풀이를 하다보니 조합, 순열, 중복 순열 개념이 자주 등장하는 것을 알았다.
물론 직접 코드로 구현할수도 있지만, itertools 라이브러리에 이미 구현되어 있기에 잘 이용한다면 큰 도움이 될 것 같아서 정리를 한다.
⭐️ itertools: 효율적인 루핑을 위한 iterator를 만드는 함수

itertools의 여러가지 함수 중 조합형 iterator
- combinations()
- combinatios_with_replacement()
- product()
- permutations()
📌 combinations(iterable, r): iterable에서 원소 개수가 r개인 조합 뽑기
from itertools import combinations
l = [1,2,3]
for i in combinations(l,2):
print(i)
---------------------
출력 결과:
(1, 2)
(1, 3)
(2, 3)
파이썬 공식 문서에 따르면 입력 iterable의 순선에 따라 사전식 순서로 방출된다.
따라서, 입력 iterable이 정렬되어 있으면, 조합 튜플이 정렬된 순서로 생성된다.
📌 combinatios_with_replacement(iterable, r): iterable에서 원소 개수가 r개인 중복 조합 뽑기
from itertools import combinations_with_replacement
l = ['A', 'B', 'C']
for i in combinations_with_replacement(l,2):
print(i)
-------------
출력결과:
('A', 'A')
('A', 'B')
('A', 'C')
('B', 'B')
('B', 'C')
('C', 'C')
📌 permutations(iterable,r=None): iterable에서 원소 개수가 r개인 순열 뽑기
from itertools import permutations
l = ['A', 'B', 'C']
for i in permutations(l, 3): #r을 지정하지 않거나 r=None으로 하면 최대 길이의 순열이 리턴된다!
print(i)
---------------
출력결과:
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
📌 product(*iterables, repeat=1): 여러 iterable의 중복 순열 뽑기
from itertools import product
l1 = ['A', 'B']
l2 = ['1', '2']
for i in product(l1,l2,repeat=1): #l1과 l2의 모든 쌍을 지어 리턴한다
print(i)
------------------
출력결과:
('A', '1')
('A', '2')
('B', '1')
('B', '2')
------------------
for i in product(l1,repeat=3): #product(l1,l1,l1,repeat=1)과 동일한 출력
print(i)
------------------
출력결과:
('A', 'A', 'A')
('A', 'A', 'B')
('A', 'B', 'A')
('A', 'B', 'B')
('B', 'A', 'A')
('B', 'A', 'B')
('B', 'B', 'A')
('B', 'B', 'B')
product는 다른 함수와 달리 인자로 여러 iterable을 넣어줄 수 있고, 그 iterable간의 모든 짝을 지어서 리턴한다.
이 외에도 itertools가 제공하는 함수는 매우 많다. 필요에 따라 조합, 순열 등이 필요한 문제에 적용하면 좋다.
추가적인 사항은 아래 출처의 파이썬 공식 문서를 참고하자.
'Algorithm > Algorithm' 카테고리의 다른 글
| [BOJ, Python] 백준 NZEC(Non-Zero Exit Code) 오류 (0) | 2026.07.31 |
|---|---|
| [BOJ, Python] 1699번_제곱수의 합 (0) | 2026.07.31 |
| [BOJ, Python] 백준 3151번_합이 0 (0) | 2026.07.30 |
| [BOJ, python] 20922번_겹치는 건 싫어 (0) | 2026.07.30 |
| [BOJ, Python] 2294번_동전 2 (0) | 2026.07.30 |