열렬히.뛰기

15650번: N과 M(2)

알고리즘: 실전 > 백준 단계별로 풀기: 10번 ~ 25번 > 15650번: N과 M(2)

문제

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
  • 단, 중복되는 수열을 여러 번 출력하면 안된다.

아이디어

  • 1 ⇒ 2, 3, 4
  • 2 ⇒ 3, 4
  • 3 ⇒ 4
  • for문이 돌아갈 때, 시작점을 하나씩 늘리면 된다.

코드

python
n, m = map(int, input().split())
s = []
def dfs(start):
    if len(s) == m:
        print(" ".join(map(str, s)))
        return

    for i in range(start, n+1):
        if i not in s:
            s.append(i)
            dfs(i+1)
            s.pop()

dfs(1)