728x90
#15650
#N,M 입력
N,M=map(int,input().split())
#빈 리스트 만들어둠
s = []
#dfs기반의 함수
def dfs(start):
#s의 길이가 M이되면 입력중지하고 출력해줌
if len(s) == M:
print(' '.join(map(str,s)))
return
#s의 길이가 M이 아닌경우 N회 반복
for i in range(start, N + 1): #시작점을 start로 설정
if i in s: #이미 존재하는 수인 경우 넘어감
continue
s.append(i) #리스트에 수 입력
dfs(i+1) #시작점을 한칸 미뤄서 재귀호출
s.pop() #재귀호출 종료되면 제거
dfs(1) #함수실행
지난 글에서 백트래킹 연습을 더하보려고 했던게 생각나서 한문제 더 풀어보았다. 15649번과 차이는 거의 없는 문제였고 시작점을 하나씩 밀어서 같은 숫자가 나오는 경우를 제외해주는 역할을 하도록 dfs함수의 인자로 start를 설정해주었고 재귀호출이 될 때마다 그 값을 1씩 키워주었다.
728x90
'Sketch (Programming Language) > Python' 카테고리의 다른 글
Baekjoon Training #1446 (0) | 2023.01.27 |
---|---|
Baekjoon Training #1620 (0) | 2023.01.26 |
Baekjoon Training #2751 (0) | 2023.01.21 |
Baekjoon Training #15649 (0) | 2023.01.15 |
Baekjoon Training #2178 (0) | 2023.01.10 |