이 문제는 n개의 정수들로 이루어진 리스트 형태의 numbers 가 주어지고 이 요소들을 순서를 바꾸지 않고 +,-를 이용해 주어지는 target과 값이 같아지는 경우의 수를 구하는 문제 입니다. 저는 BFS로 queue를 이용해 문제를 해결 하였습니다.
from collections import deque
def solution(numbers, target):
answer = 0 # target과 같이 같은 경우의 수의 개수
k = len(numbers) # 입력되는 리스트의 길이
index = 0 # 인덱스 값
queue = deque() # deque을 이용해 queue를 만들기
# 첫번째 인덱스 +,- 한 이후 index와 함께 저장
queue.append([numbers[index],index])
queue.append([-numbers[index],index])
while queue:
temp,index = queue.popleft() # 하나씩 꺼내기
index+=1
if index < k: # numbers보다 작다면 꺼내기
queue.append([temp+numbers[index],index])
queue.append([temp-numbers[index],index])
elif temp == target: # 꺼낸 temp와 target이 같다면 +1
answer+=1
return answer
queue를 이용해 하나씩 꺼내며 인덱스를 하나씩 방문하여 꺼낸 값과 다음 인덱스 값을 +,-한 값을 저장하며 끝 인덱스까지 반복하고 index값이 numbers의 길이보다 커지면 더이상 반복하지 않고 queue를 꺼내며 꺼낸값과 target값과 같다면 경우의 수 answer을 +1 해줍니다.
DFS,BFS 기초 공부를 하고 연습문제를 직접 풀어보고 어느정도 이해를 했다고 생각하고 프로그래머스에 있는 DFS,BFS 관련 문제를 풀어보기로 했습니다. 막상 문제를 풀려고 하니까 어떻게 해야하지 좀 막막했던것 같습니다.
DFS,BFS 관련 문제를 많이 풀어보고 경험해봐야 익숙해질것 같다는 생각이 들어 더 열심히 공부해야겠다는 생각이 들었습니다.