개발/algorithm

[프로그래머스][level2] 타겟 넘버 -python

zzi_on2 2021. 12. 28. 13:24

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/43165

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+

programmers.co.kr

 

풀이 

  • bfs 사용해서 풀이. ( bfs 연습 좀 해야겠다 ) 
from collections import deque

def solution(numbers, target):
    answer = 0
    
    queue = deque()
    # 큐에 더하거나 뺀 결과와 index를 저장 
    queue.append((0,0))

    while queue:
        # 더한 결과와 index
      result, index = queue.popleft()
      # index가 주어진 숫자들의 개수와 같다면 마지막 숫자라는 뜻 
      if index == len(numbers):
          # 최종 결과과 target 숫자와 같은지 비교 
        if result == target:
            # 같다면 방법의 수 + 1 
          answer +=1 
      else :
        number = numbers[index]
        # 더하고 뺀 결과 저장, index + 1 
        queue.append((result + number, index + 1))
        queue.append((result - number, index +1 ))
    return answer