[Algorithm] 타겟 넘버

이호영·2020년 5월 12일
0

algorithm

목록 보기
9/9
post-thumbnail

문제 설명

타겟 넘버

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
  • 각 숫자는 1 이상 50 이하인 자연수입니다.
  • 타겟 넘버는 1 이상 1000 이하인 자연수입니다.

문제 해설

문제 분류 대로 DFS/BFS를 이용하면 쉽게 풀이할 수 있다.

코드가 짧은 만큼 코드를 별다른 설명없이도 코드를 보면 이해할 수 있을것이다.

answer = 0

def solution(numbers, target):
    def add(index, number):
        global answer
        if index > 0:
            add(index - 1, number + numbers[index - 1])
            add(index - 1, number - numbers[index - 1])
        else:
            if number == target:
                answer += 1
    add(len(numbers), 0)
    return answer

DFS를 이용한 풀이다.

numbers의 맨 마지막 숫자부터 차례대로 더한 경우, 뺀 경우를 하나하나 경우의 수를 함수를 호출해 추가해 나간다. 그리고 마지막 수(numbers의 첫번째 수)를 더했을때, 뺏을때 타겟 넘버와 같다면 방법의 수(answer)를 하나 추가한다.

profile
안녕하세요!

0개의 댓글