본문 바로가기
프로그래머스

프로그래머스_타겟넘버

by 집못가는프로그래머 2021. 9. 9.

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

 

Code

def solution(numbers, target):
    answer = 0

    def back(result, point) :
        if point == len(numbers) :
            if result == target :
                nonlocal answer 
                answer += 1
            return 

        back(result + numbers[point], point + 1)
        back(result - numbers[point], point + 1)
    back(0, 0)

    return answer

print(solution([1,1], -2))
print(solution([2,3,5,7,9], 2))

 

Code 설명

- DFS (Depth-First-Search)

- numbers의 point(인덱스) 값마다 덧셈,뺄셈으로 누적한다

- 초기에 누적값 0,  point(인덱스) 0을 호출한다

   -> 초기누적값 0에 numbers의 0번째 값을 덧셈 / 뺄셈 (point 증가 = 인덱스 증가)

- 입력값 numbers배열의 point번째 숫자의 덧셈, 뺄셈을 누적하며 DFS 실행.

- point가 len(numbers)와 같을 때가 모든 숫자를 사용했을 경우 이므로

  그때 누적된 값이 target과 같을 때는 answer + 1 and return, 아니면 그냥 return

 

 

'프로그래머스' 카테고리의 다른 글

프로그래머스_N으로 표현  (0) 2021.09.16
프로그래머스_여행경로  (0) 2021.09.13
프로그래머스_카펫  (0) 2021.09.13
프로그래머스_단어변환  (0) 2021.09.10
프로그래머스_네트워크  (0) 2021.09.10

댓글