1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열을 출력하는 문제인데
permutations
을 이용해서 해결할 수 있었다.
from itertools import permutations
N, M = map(int, input().split())
arr = [i for i in range(1, N+1)]
for i in permutations(arr, M):
print(*i)
import sys
input = sys.stdin.readline
N, M = map(int, input().strip().split())
li = []
def recursive():
if len(li) == M:
print(" ".join(map(str, li)))
return
else:
for i in range(1, N+1):
if i not in li:
li.append(i)
recursive()
li.pop()
recursive()
입력
4 2
출력
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3
li
의 길이는 M이 아니므로 if
문이 실행되지 않고 내려간다. 만약 1이 li
에 없다면 1을 append
하고 재귀함수를 실행시켜 자기 자신을 다시 호출한다. 그 다음 다시 실행된 재귀함수가 동작되는데 이 때 1이 li
에 있으므로 넘어가고 2가 들어온다. 그렇게 되면 현재 li
에는 [1, 2]
두 개가 들어있으므로 조건에 만족하여 출력한다. 이런 작업을 반복한다.