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)
백트래킹, 처음에는 어렵게 느껴졌는데 지금은 감을 좀 잡은 것 같다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] [Python] 5212 : 지구온난화 (0) | 2021.09.19 |
---|---|
[BOJ] [Python] 10971 : 외판원 순회 2 (2) | 2021.09.16 |
[BOJ] [Python] 11663번 : 선분 위의 점 (0) | 2021.09.15 |
[BOJ] [Python] 10815번 : 숫자 카드 (0) | 2021.09.15 |
[BOJ] [Python] 5568번 : 카드 놓기 (0) | 2021.08.27 |