Skip to content

Commit 3b4b0e1

Browse files
committed
[PGS] 타겟넘버 -stack을 이용한 DFS 풀이 / Level 2 / 30분 / 성공
1 parent f73af46 commit 3b4b0e1

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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

Comments
 (0)