본문 바로가기
Python

[Python] 파이썬으로 순열, 조합, 중복 순열 생성하기(itertools library)

by daewooki 2021. 8. 11.
반응형

백준이나 프로그래머스에서 코딩 문제를 풀다보면 순열, 조합이 필요한 경우가 있다. 

자바에서는 순열, 조합 등을 구현하려면 제공하는 라이브러리가 없어 직접 코드를 작성해야한다. 

코테를 볼 때 이걸 직접 구현하려면 꽤나 시간이 소요되기 때문에 라이브러리를 제공하는 파이썬을 사용하는게 나름 유리하지 않나라고 생각한다.(개인적인 의견입니다;;ㅎ)

 

백트래킹 관련 문제를 풀다보면 순열, 조합, 중복순열, 중복 허용 조합 등이 필요한대 itertools 패키지에서 제공하는 함수를 통해 구현할 수 있다.

 

 

itertools 패키지란?

Python에서 제공하는 반복자를 만드는 모듈입니다. Docs에 보면 "이 모듈은 APL, Haskell 및 SML의 구성 요소에서 영감을 받은 반복기 빌딩 블록을 구현하며 각각은 파이썬에 적합한 형태로 재 작성되었습니다." 라고 되어있는데.. 말이 어렵고 그냥 바로 함수를 써보면 됩니다. 

공식 문서: https://docs.python.org/3/library/itertools.html

 

itertools — Functions creating iterators for efficient looping — Python 3.9.6 documentation

 

docs.python.org

 

순열(Permutaion)

코드

from itertools import permutations

nums = [1, 2, 3]
permute = permutations(nums, 2)
print(list(permute))

결과

[(1,2), (1,3), (2,1), (2,3), (3,1), (3,2)]

 

 

 

조합(Combination)

코드

from itertools import combinations

nums = [1, 2, 3]
combination = combinations(nums, 2)
print(list(combination))

결과

[(1,2), (1,3), (2,3)]

 

중복순열(Product)

코드

from itertools import product

nums = [1, 2, 3]
prod = product(nums, repeat=2)
print(list(prod))

결과

[(1,1), (1,2), (1,3), (2,1), (2,2), (2,3), (3,1), (3,2), (3,3)]

 

중복허용조합(Combinations with replacement)

코드

from itertools import combinations_with_replacement

nums = [1, 2, 3]
prod = combinations_with_replacement(nums, 2)
print(list(prod))

결과

[(1,1), (1,2), (1,3), (2,2), (2,3), (3,3)]

 

백트래킹 관련 문제에서 순열, 조합은 자주 보이는데 파이썬에서는 표준 라이브러리 itertools에서 제공하기 때문에 쉽게 해결할 수 있다. 

 

 

반응형

댓글