해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 기법을 말한다. 최적화 문제와 결정 문제를 푸는 방법이 된다.
깊이 우선 탐색 (DFS) - 완전 탐색 방법
BOJ #15649번 : N과 M (1)
import sys
n, m = map(int, sys.stdin.readline().split())
s = []
def f():
if len(s) == m:
print(' '.join(map(str, s)))
return
for i in range(1, n + 1):
if i in s: # 가지치기?
continue
s.append(i)
f()
s.pop()
f()
if len(s) == m:
print(' '.join(map(str, s)))
return
또 다른 풀이는 파이썬의 in
연산자를 사용하는 것이 아니라 visited
리스트를 사용한다.
in
연산자를 사용하는 것이 코드가 더 간결함in
연산자가 O(n)의 시간복잡도를 갖기 때문에 visited 리스트를 사용하는 것이 더 효율적in
연산자를 사용하는 코드가 리스트를 visited
리스트를 사용하지 않기 때문에 더 효율적