언어

target으로 계산되는 경우의 수 구하기: DFS

땅호720 2024. 2. 16. 17:48

모든 경우의 수에서 target의 개수를 구하는 문제

사용하는 경우: 모든 노드를 방문 하고자 하는 경우이므로 DFS 계산

# 타겟 넘버를 만드는 방법의 수 -> DFS (모든 경우 탐색)
answer = 0
def DFS(numbers, target, idx=0, value=0):
    global answer
    N = len(numbers)
    
    # idx가 마지막이고 value가 target과 같을 때는 answer
    if(idx == N and target == value):
        answer += 1
        return
    elif(idx == N):   # idx가 마지막이기만 하면 non answer
        return

    DFS(numbers,target,idx+1,value+numbers[idx])	# idx번째 수를 더해준 경우로 재귀
    DFS(numbers,target,idx+1,value-numbers[idx])	# idx번째 수를 빼준 경우로 재귀
    
def solution(numbers, target):
    global answer
    
    DFS(numbers, target)
    
    return answer

 

 

 

BFS 코드

def solution(numbers, target):
    leaves = [0]  
    count = 0 

    for num in numbers:
        temp = list()
	
        for leaf in leaves:
            temp.append(leaf + num)    # 더하는 경우
            temp.append(leaf - num)    # 빼는 경우

        leaves = temp

    # 모든 경우의 수 계산 후 target과 같은지 확인 
    for leaf in leaves:
        if leaf == target: 
            count += 1

    return count