프로그래머스 깊이/너비 우선 탐색 문제풀이 입니다.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/43165
[나의 풀이1]
# bfs
def solution(numbers, target) :
answer = 0
from collections import deque
# 값,인덱스
queue = deque([[numbers[0],0],[numbers[0]*(-1),0]])
while queue:
v,n = queue.popleft()
if n < len(numbers)-1:
n += 1
queue.append([v+numbers[n],n])
queue.append([v-numbers[n],n])
else:
break
for x in queue:
if x[0] == target:
answer += 1
return answer
[나의 풀이2]
# dfs
def solution(numbers, target) :
answer = 0
# 값,인덱스
stack = list([[numbers[0],0],[numbers[0]*(-1),0]])
while stack:
v,n = stack.pop()
if n < len(numbers)-1:
n += 1
stack.append([v+numbers[n],n])
stack.append([v-numbers[n],n])
else:
if v == target:
answer += 1
return answer
DFS , BFS 두 가지 알고리즘으로 각각 해결하였습니다. stack 또는 queue 자료에 [현재까지 더한 값, 더한 갯수] 를 주어진 갯수 n개까지 연산하고 target 값과 같을 시 answer에 1개씩 더하는 방식입니다.🐾🐾🐾
감사합니다.