
https://www.acmicpc.net/problem/15650
자연수 N과 M이 주어졌을 때, 1부터 N까지의 수 중에서 중복 없이 M개를 고른 수열을 오름차순으로 모두 출력해라. 라는 문제이다.
import sys
input = sys.stdin.readline
N, M = map(int, input().split()) # N: 숫자 범위, M: 선택할 숫자 개수
def dfs(start, path):
# 길이가 M이 되면 출력
if len(path) == M:
print(' '.join(map(str, path)))
return
# start부터 N까지 반복
for i in range(start, N + 1):
# 현재 숫자 i를 path에 추가하고
# 다음 재귀는 i보다 큰 수부터 진행 => 오름차순 보장
dfs(i + 1, path + [i])
# DFS 시작 (1부터 시작, 아직 고른 숫자 없음)
dfs(1, [])