[짤막] 코테볼 때 자주 사용하는 라이브러리 - itertools

Jeong SeongYun·2022년 8월 18일
0

짤막

목록 보기
13/16
post-thumbnail

코테 문제 중에 경우의 수를 활용해야 하는 경우가 있습니다. 뭔가 반복되는 요소에 대해 이것저것 해야하는데 그걸 하나하나 구현하다가는 1시간에 8문제를 풀기 매우 어렵습니다..!

저같은 코린이를 위해 파이썬에서 내려준 것이 바로 'itertools' 입니다!

from itertools import ...

물론 다양한 반복식을 만들어낼 수 있지만 아마 itertools를 사용하는 이유가 대부분 조합식의 존재 때문일 것입니다.

Permutation, Combination 기억하시나요? nPn 이나 nCn 으로 보통 옛날에 생각없이 외우고 공식만 적용하는 녀석들이었죠. 그런 공부방식 때문에 제 수학 성적은 항상 바닥을 쳤습니다.. ㅠ

어쨌든, 코테를 풀다보면 여러 경우의 수를 다 따져본 다음에 그 중에서 조건에 해당하는 녀석만 뽑아서 푸는 경우가 종종 있습니다. (물론 쉬운 문제는 이렇게 하게 놔두는데,,, 조금만 어렵게 내면 이렇게 하는 경우 시간 초과로 못 풀게 하는 경우가 있더라구요.. 너무행 ㅠㅠ)

일단 알아서 나쁠 건 없으니, 조합식만 어떻게 쓰는지 확인해보겠습니다.

import product

iterable 한 객체의 요소를 n번 조합하는 모든 경우의 수를 출력해줍니다. 중복 순열과 같죠.

from itertools import product

lst = ['a','b','c']

product_result= product(lst, repeat=2)
for i in product_result :
    print(i)

Output
('a', 'a')('a', 'b')('a', 'c')('b', 'a')('b', 'b')
('b', 'c')('c', 'a')('c', 'b')('c', 'c')

lst 내에 있는 객체들이 2개씩 뽑혀 이룰 수 있는 모든 경우의 수를 구했습니다. 물론 중복을 허용한 상태입니다.

import permutations

문자 그대로 iterable한 객체의 순열을 내놓습니다. 눈으로 보는 게 더 빠르겠죠?

from itertools import permutations

lst = ['a','b','c']

permutations_result= permutations(lst)
for i in permutations_result :
    print(i)

Output
('a', 'b', 'c')('a', 'c', 'b')('b', 'a', 'c')
('b', 'c', 'a')('c', 'a', 'b')('c', 'b', 'a')

간단하죠?

import combinations

말 그대로 iterable한 객체의 조합을 내놓습니다. parameter로 iterable한 객체와 몇개를 그 중에서 조합시킬 것인지를 넣습니다.

from itertools import combinations

lst = ['a','b','c']

combinations_result= combinations(lst, 2)
for i in combinations_result :
    print(i)

Output
('a', 'b')('a', 'c')('b', 'c')

import combinations_with_replacement

일반 combinations가 중복을 허용하지 않았다면, 이 함수는 중복을 허용합니다.

from itertools import combinations_with_replacement

lst = ['a','b','c']

combinations_with_replacement_result= combinations_with_replacement(lst, 2)
for i in combinations_with_replacement_result :
    print(i)

Output
('a', 'a')('a', 'b')('a', 'c')
('b', 'b')('b', 'c')('c', 'c')

간단하죠?

이제 코테에서 모든 경우를 따져봐야 하는 경우엔 일단 itertools를 import 해보고 풀리는지 확인해보는 것도 하나의 방법이 되겠습니다 :)

profile
물어보면 대답해줄 수 있는 데이터쟁이

0개의 댓글