프로그래머스/Lv. 2

15. 타겟 넘버 ★(DFS)

Seohyeong Lee 2024. 7. 18. 23:12

유형 : DFS

풀이 시간 : 인터넷 참고

 

from collections import deque
def solution(numbers, target):
    #dfs 구현 
    answer = 0
    stack = deque()
    ln = len(numbers)
    
    #첫 번째 원소를 insert하고 시작 
    stack.append([numbers[0], 0])
    stack.append([-numbers[0], 0])
    while stack:
        [curracc, curridx] = stack.pop()
        if curridx == ln-1:
            if target == curracc:
                answer += 1
        else:
            stack.append([curracc + numbers[curridx+1], curridx+1])
            stack.append([-(curracc + numbers[curridx+1]), curridx+1])
    return answer

 

DFS는 stack을 이용하며, while stack: 으로 시작

stack을 pop한 뒤 해당 stack의 자식 노드들을 stack에 추가

(만약 circular 연결이 있다면 이미 방문한 노드는 제외)