Binary Journey

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

프로그래머스/level 2

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

binaryJournalist 2022. 2. 14. 23:54
반응형

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

 

 

** Javascript

 

function solution(numbers, target) {
    let answer = 0;
    function dfs(nodeList, index) {
        if (index < nodeList.length) {
            nodeList[index] *= 1;
            dfs(nodeList, index + 1);
            nodeList[index] *= -1;
            dfs(nodeList, index + 1);
        } else {
            let sum = nodeList.reduce((acc, node) => acc + node, 0);
            if (sum === target) answer++;
        }
    }
    dfs(numbers, 0);
    return answer;
}

 

 

 

 

** Python

 

 

 

 

 

마우스 패드에 직접 그려서 이상하지만

 

일단 임의의 한 값에 +/- 가 반복되어 나눠 들어가는 dfs 구조로

 

메소드 안에 -값 재귀와 +값 재귀를 포함해야 한다는 것까지는 파악했다.

 

그리고 answer에 더해서 값을 누적하는 것보다 target 에서 값을 빼는 방법이 재귀적으로 가능할 것 같았다.

 

여기까지는 생각으로는 가능했는데

 

코드로 결국 풀어내기는 어려웠다

 

 

 

 

 

추천 1등 풀이

 

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

 

 

아래 코드가 내 거

1등 풀이를 참고했음^^7

사실 거의 똑같다 ㅋㅋㅋㅋㅋ 하지만 나는 조건문에 not 사용하는 것을 지양하므로

 

 

 

 

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

 

반응형