<문제>
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
<입력>
첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7)
<출력>
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.
수열은 사전 순으로 증가하는 순서로 출력해야 한다.
Python 내부 함수 itertools의 product를 이용하면 풀릴것이라고 생각함.
from itertools import product
N, M = map(int, input().split())
P = product(range(1, N+1),repeat=M) # iter(tuple)
for i in P:
print(' '.join(map(str, i))) # tuple -> str
🔗참고
https://juhee-maeng.tistory.com/91
product(=중복순열)
- product(반복 가능한 객체, repeat=1)
- N과 M (1)에서 product는 두개 이상의 리스트에서 모든 조합을 계산할 때 사용한다고 했는데 중복순열을 계산할 때도 사용할 수 있음.
> 중복순열from itertools import product for i in product([1,2,3], repeat=2): print(i, end=" ") # (1, 1) (1, 2) (1, 3) (2, 1) (2, 2) (2, 3) (3, 1) (3, 2) (3, 3)
> 두개 이상의 리스트에서 모든 조합을 계산from itertools import product for i in product([1,2,3],'ab'): print(i, end=" ") # (1, 'a') (1, 'b') (2, 'a') (2, 'b') (3, 'a') (3, 'b')
🔗백준 - N과 M (3)
https://www.acmicpc.net/problem/15651