[프로그래머스/Python] 깊이/너비 우선 탐색(DFS/BFS) - 타겟 넘버
+
,-
를 배열에 담아서 반복문에 돌릴 수 있나?
(당연 안됨..이런 생각을 하다니 대단해)
👩🏻🏫 BFS 풀이
def solution(numbers, target):
# 트리의 첫 번째 층에는 0
tree = [0]
# 매개변수로 받은 숫자 목록을 하나씩 꺼내와 주는 역할
for num in numbers:
sub_tree = []
# 노드 하나하나에 숫자를 더하고 빼주어 자식 노드들을 생성하는 역할
for tree_num in tree:
sub_tree.append(tree_num + num)
sub_tree.append(tree_num - num)
tree = sub_tree
return tree.count(target)
-
트리를 한층 한층 밑으로 만들어 나가는 것 = 한 노드에 숫자를 빼고 더한 결과를 자식 노드로 쌓는다.
-
tree는 이전 수에 대한 계산 결과를 담은 층을 가지고 있고, sub_tree는 현재 숫자에 대한 결과를 담은 자식 노드를 하나씩 추가하는 역할을 한다.
👩🏻🏫 DFS 풀이
answer = 0
def dfs(numbers, target, idx, total):
global answer
if idx == len(numbers):
if target == total:
answer += 1
return
dfs(numbers, target, idx + 1, total + numbers[idx])
dfs(numbers, target, idx + 1, total - numbers[idx])
def solution(numbers, target):
global answer
dfs(numbers, target, 0, 0)
return answer
출처
https://jiss02.tistory.com/18
https://johnyejin.tistory.com/60
Author And Source
이 문제에 관하여([프로그래머스/Python] 깊이/너비 우선 탐색(DFS/BFS) - 타겟 넘버), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sugenius77/프로그래머스Python-깊이너비-우선-탐색DFSBFS-타겟-넘버저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)