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