백트래킹 문제를 풀다보니 15649번부터 15652번 문제가 모두 itertools를 써서 간단하게 해결할 수 있어서 한꺼번에 다뤄보려 한다.
순열(Permutation)
: 순서를 고려하여 뽑는 경우의 수
from itertools import permutations
# 순열을 구할 itertator와 조합의 개수를 parameter로 받음
print(permutations([1,2,3], 2)
#결과
(1,2)
(1,3)
(2,1)
(2,3)
(3,1)
(3,2)
import sys
from itertools import permutations
input = sys.stdin.readline
N, M = map(int, input().split())
for a in permutations(map(str, range(1,N+1)),M):
print(' '.join(a))
itertools 생각 못하고 재귀로 풀었다가 시간이 대략 10배정도 차이가 났다,,, 그래도 스스로 풀이 완료!
조합(Combination)
: 순서를 고려하지 않고 뽑는 경우의 수
from itertools import combinations
# 조합을 구할 itertator와 조합의 개수를 parameter로 받음
print(combinations([1,2,3], 2)
#결과
(1,2)
(1,3)
(2,3)
import sys
from itertools import combinations
input = sys.stdin.readline
N, M = map(int, input().split())
for a in combinations(map(str,range(1,N+1)), M):
print(*a)
스스로 풀이 완료!
중복순열(Permutation with Repetition → Product)
: 순서를 고려하여 뽑는 경우의 수 (중복 가능)
from itertools import product
# 중복 순열을 구할 itertator와 조합의 개수(repeat)를 parameter로 받음
print(product([1,2,3], repeat = 2))
#결과
(1,1)
(1,2)
(1,3)
(2,1)
(2,2)
(2,3)
(3,1)
(3,2)
(3,3)
import sys
from itertools import product
input = sys.stdin.readline
N, M = map(int, input().split())
for a in product(map(str,range(1,N+1)), repeat = M):
print(' '.join(a))
스스로 풀이 완료!
중복조합(Combination with Repetition)
: 순서를 고려하지 않고 뽑는 경우의 수 (중복 가능)
from itertools import combinations_with_replacement
# 중복 조합을 구할 itertator와 조합의 개수를 parameter로 받음
print(combinations_with_replacement([1,2,3], 2))
#결과
(1,1)
(1,2)
(1,3)
(2,2)
(2,3)
(3,3)
import sys
from itertools import combinations_with_replacement
input = sys.stdin.readline
N, M = map(int, input().split())
for a in combinations_with_replacement(map(str,range(1,N+1)), M):
print(' '.join(a))
스스로 풀이 완료!