sm 기술 블로그

118. 15650(N과M (2)) 본문

문제/백준_파이썬

118. 15650(N과M (2))

sm_hope 2022. 6. 29. 09:52
N, M = list(map(int, input().split()))
S = []


def DFS(start):
    if len(S) == M:
        print(" ".join(map(str, S)))

    for i in range(start, N+1):
        if i not in S:
            S.append(i)
            DFS(i+1)
            S.pop()


DFS(1)

문제요약

DFS를 이용하여 백트래킹을 해보아라.

설명

DFS와 백트래킹에 대한 개념은 아래를 참고하자.

https://smhope.tistory.com/309

 

백트래킹

백트래킹 더 이상 나아갈 수 없는 상황에서 그 이전 단계로 복귀하는 과정 모든 경우의 수를 전부 고려하는 알고리즘이다. 트리 탐색 알고리즘이라고 봐도 무방하며 방식에 따라 깊이우선탐색 (

smhope.tistory.com

https://smhope.tistory.com/307

 

깊이 우선 탐색(DFS)

깊이 우선 탐색(DFS) -> 스택 사용 (재귀 이용 -> 재귀 자체가 스택임) 루트노드에서 시작해서 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법 특징 깊이 우선 탐색(DFS) 에 비해서

smhope.tistory.com

이번 문제에서는 모든 경로를 탐색하는것이 아닌 현재 노드 기준으로 탐색 후 백트래킹은 진행하나, 이미 방문한 곳은 방문하지 않는다.

 

때문에 저번 문제에서 시작부분만 추가해준다면 이미 방문한 곳은 방문하지 않게 된다.

'문제 > 백준_파이썬' 카테고리의 다른 글

120. 15650(N과M (4))  (0) 2022.06.29
119. 15650(N과M (3))  (0) 2022.06.29
117. 15649( N과M(1) )  (0) 2022.06.28
116. 2004(조합 0의 개수)  (0) 2022.06.27
115. 1676(팩토리얼 0의 개수)  (0) 2022.06.27
Comments