[백준/Python] 15650 N과 M (2)


정답 코드 및 설명
def DFS(N, M, sequence=[], start=1):
if len(sequence) == M:
print(' '.join(map(str, sequence)))
return
for i in range(start, N + 1):
sequence.append(i)
DFS(N, M, sequence, i + 1)
sequence.pop()
N, M = map(int, input().split())
DFS(N, M)
N과 M(1) 문제에서 확장된 문제로 차이점은 오름차순이어야한다는 점이다.
- DFS(N, M, sequence=[], start=1) 함수는 네 개의 매개변수를 받는다: N과 M은 문제에서 주어진 값이고, sequence는 현재까지 선택된 수열을 나타내며, start는 다음에 선택할 수 있는 가장 작은 숫자를 나타낸다.
- 초기 start 값은 1이다. 이는 처음 선택할 수 있는 가장 작은 숫자가 1임을 의미한다.
- 재귀 호출 시 start 값을 i + 1로 설정함으로써, 다음 번에는 현재 선택한 숫자보다 큰 숫자만 선택될 수 있도록 한다. 이것이 오름차순 수열을 보장하는 핵심이다.
- 수열의 길이가 M에 도달하면, 해당 수열을 출력하고 함수를 빠져나온다. 그렇지 않은 경우, 현재 start부터 N까지의 숫자를 순회하며 위의 과정을 반복한다.