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

재활용병·2024년 1월 26일
0

코딩 테스트

목록 보기
126/157

[백준/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) 문제에서 확장된 문제로 차이점은 오름차순이어야한다는 점이다.

  1. DFS(N, M, sequence=[], start=1) 함수는 네 개의 매개변수를 받는다: N과 M은 문제에서 주어진 값이고, sequence는 현재까지 선택된 수열을 나타내며, start는 다음에 선택할 수 있는 가장 작은 숫자를 나타낸다.
  2. 초기 start 값은 1이다. 이는 처음 선택할 수 있는 가장 작은 숫자가 1임을 의미한다.
  3. 재귀 호출 시 start 값을 i + 1로 설정함으로써, 다음 번에는 현재 선택한 숫자보다 큰 숫자만 선택될 수 있도록 한다. 이것이 오름차순 수열을 보장하는 핵심이다.
  4. 수열의 길이가 M에 도달하면, 해당 수열을 출력하고 함수를 빠져나온다. 그렇지 않은 경우, 현재 start부터 N까지의 숫자를 순회하며 위의 과정을 반복한다.
profile
코딩 말고 개발

0개의 댓글

관련 채용 정보