1+ '''
2+ 타겟넘버 - deque를 이용한 BFS 풀이
3+ '''
4+ from collections import deque
5+
6+ def solution (numbers , target ):
7+ answer = 0
8+ queue = deque ()
9+ n = len (numbers )
10+ # 초기 상태를 큐에 추가. 시작 숫자에서 +와 - 두 가지 경우를 모두 추가
11+ # (이때 인덱스값도 함께 추가) [값, 인덱스] (enqueue 작업)
12+ queue .append ([numbers [0 ], 0 ]) # 첫 번째 숫자를 더한 경우
13+ queue .append ([- 1 * numbers [0 ], 0 ]) # 첫 번째 숫자를 뺀 경우
14+
15+ # 큐가 빌 때까지 반복
16+ while queue :
17+ temp , index = queue .popleft () # dequeue. 큐에서 값을 꺼내서 현재 합과 인덱스 가져옴
18+ index += 1 # 다음 인덱스로 넘어감
19+ # 인덱스가 리스트의 길이보다 작다면,
20+ if index < n :
21+ # 현재 합에 다음 숫자를 더하거나 빼는 두 가지 경우를 큐에 추가
22+ queue .append ([temp + numbers [index ], index ])
23+ queue .append ([temp - numbers [index ], index ])
24+ else : # 다 순회했다면 temp 값과 target값 비교
25+ if temp == target :
26+ answer += 1
27+ return answer
28+
29+ # 예제 1: 숫자 배열 [1, 1, 1, 1, 1]로 목표 값 3을 만드는 방법의 수
30+ numbers = [1 , 1 , 1 , 1 , 1 ]
31+ target = 3
32+ print (solution (numbers , target )) # 결과: 5
33+
34+ # 예제 2: 숫자 배열 [4, 1, 2, 1]로 목표 값 4를 만드는 방법의 수
35+ numbers = [4 , 1 , 2 , 1 ]
36+ target = 4
37+ print (solution (numbers , target )) # 결과: 2
0 commit comments