본문 바로가기
Sketch (Programming Language)/Python

Baekjoon Training #15650

by 생각하는 이상훈 2023. 1. 21.
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