
문제 출처 : https://www.acmicpc.net/problem/15651
N과 M (1) , N과 M (2) 에 이어 N과 M 3 이다.
그러나 이 문제가 (1) 이 되어도 될 정도로 가장 기본적인 문제이다.
중복, 순서 다 상관없이 그저 N중 M개를 골라 사전순을 나열하면 된다.
앞선 문제들에서 나온 백트래킹 기법인 visited 배열이나 별다른 테크닉 없이 기본적인 백트래킹 함수를 구현하면 풀 수 있다.
import sys
input = sys.stdin.readline
N , M = map(int,input().split())
nums = [i+1 for i in range(N)] # [1,2,3..N]
path = []
def backtracking():
# 종료 조건
if len(path) == M :
print(*path)
return;
# 종료 조건이 아니라면 N번 반복하는데
for i in range(N):
path.append(nums[i])
backtracking()
path.pop()
backtracking()