본문 바로가기

알고리즘/백준

[BOJ] [Python] 15649 : N과 M (1)

1부터 N까지 자연수 중에서 중복 없이 M개를 골라 수열을 만들면 된다.

 

핵심은 '중복 없이'이다.

 

 

n, m = map(int, input().split())
li = []
dp = [0] * (n + 1)


def back(cnt):
    if cnt == m:
        print(*li)
        return

    for i in range(1, n + 1):
        if dp[i] == 1:
            continue

        li.append(i)
        dp[i] = 1

        back(cnt + 1)

        dp[li[-1]] = 0
        li.pop()

back(0)

 

 

 

백트래킹, 처음에는 어렵게 느껴졌는데 지금은 감을 좀 잡은 것 같다.