[프로그래머스 43165] 타겟 넘버

코뉴·2022년 3월 5일
0

프로그래머스🍳

목록 보기
7/10

🥚문제링크

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

  • 탐색

🍳코드

def solution(numbers, target):
    if not numbers and target == 0:
        return 1
    
    if not numbers:
        return 0
    
    return solution(numbers[1:], target - numbers[0]) + solution(numbers[1:], target + numbers[0])

🧂아이디어

  • 어려운 문제는 아니었지만, 풀면서 얻은 아이디어가 있어 정리한다.
  • 처음에는 아래와 같은 코드를 작성하여 통과했다.
def solution(numbers, target):

    def solve(idx, curr):
        nonlocal answer

        if idx == len(numbers) and curr == target:
            answer += 1
            return

        if idx < len(numbers):
            solve(idx + 1, curr + numbers[idx])
            solve(idx + 1, curr - numbers[idx])

    answer = 0
    solve(0, 0)

    return answer
  • 다른 풀이들을 찾아보다가, 함수를 하나 더 만들어 주지 않아도 주어진 함수 형식인solution(numbers, target)만을 사용해서 재귀적으로 문제를 풀 수 있다는 것을 깨달았다.
  • 0에서 연산해서 target을 만들어가고, target이 만들어지면 리턴하는 형식이 아니라. target에서부터 시작해서 값들을 빼줘서 0이 되면 리턴하는 방식으로 풀면 인자가 numbers, target둘만 있어도 충분하다.
profile
코뉴의 도딩기록

0개의 댓글