반응형
백준이나 프로그래머스에서 코딩 문제를 풀다보면 순열, 조합이 필요한 경우가 있다.
자바에서는 순열, 조합 등을 구현하려면 제공하는 라이브러리가 없어 직접 코드를 작성해야한다.
코테를 볼 때 이걸 직접 구현하려면 꽤나 시간이 소요되기 때문에 라이브러리를 제공하는 파이썬을 사용하는게 나름 유리하지 않나라고 생각한다.(개인적인 의견입니다;;ㅎ)
백트래킹 관련 문제를 풀다보면 순열, 조합, 중복순열, 중복 허용 조합 등이 필요한대 itertools 패키지에서 제공하는 함수를 통해 구현할 수 있다.
itertools 패키지란?
Python에서 제공하는 반복자를 만드는 모듈입니다. Docs에 보면 "이 모듈은 APL, Haskell 및 SML의 구성 요소에서 영감을 받은 반복기 빌딩 블록을 구현하며 각각은 파이썬에 적합한 형태로 재 작성되었습니다." 라고 되어있는데.. 말이 어렵고 그냥 바로 함수를 써보면 됩니다.
공식 문서: https://docs.python.org/3/library/itertools.html
순열(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에서 제공하기 때문에 쉽게 해결할 수 있다.
반응형
'Python' 카테고리의 다른 글
[Pandas] 파일 read할 때 Error tokenizing data 에러 해결법 (0) | 2021.08.20 |
---|---|
[Python] 리스트를 문자열로 변환하기(python list to string) (0) | 2021.08.14 |
[Python] 'cp949' codec can't decode byte 0xec : illegal multibyte sequence (UnicodeDecodeError) (0) | 2021.08.03 |
Python에서 Java 코드 사용하기(feat. jpype) (0) | 2021.07.31 |
curl command to python requests (curl 명령어 python request로 변환) (0) | 2021.07.02 |
댓글