연습장/백준(BOJ) 문제풀이
[백준 15651] N과 M (3) with Python
Tesseractjh
2021. 5. 10. 01:33
문제 링크
15651번: N과 M (3)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
풀이
n, m = map(int, input().split())
def nm(n, m, seq=[]):
if len(seq) == m:
print(" ".join(seq))
else:
for i in range(1, n+1):
nm(n, m, seq+[str(i)])
nm(n, m)
재귀함수를 통해 1부터 n까지의 수를 차례로 순회하면서 하나씩 seq에 추가하여 그 길이가 m만큼 되었을 때마다 출력하도록 하였다.
itertools모듈의 product 메소드를 사용하여 더 쉽게 해결할 수 있다.
itertools.product(*iterables, repeat=1)는 iterable들의 곱집합을 튜플로 반환하며, 만약 하나의 iterable 내에서 곱집합을 얻으려면 몇 번 반복할 것인지 repeat를 지정하면 된다.
import itertools
n, m = map(int, input().split())
lst = map(str, [str(x) for x in range(1, n+1)])
print("\n".join(map(" ".join, itertools.product(lst, repeat=m))))