guswns1659 / Java-Algorithm

자료구조, 알고리즘 공부 및 문제풀이 저장소

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

guswns1659 opened this issue · comments

문제 풀이 핵심 아이디어

  • 너비, 깊이 우선 탐색에 배운 뒤에 문제는 어떻게 응용되나 보고 싶어서 봤던 문제.
  • 그래프 구조로 모든 경우의 수를 구하면 되는데 이걸 어떻게 구현하지??...
  • 참고

  • 만약 깊이 우선 탐색이 끝일 때 (index == numbers.length)
    • 노드의 합이 target과 같다면 return 1
    • 노드의 합이 target과 다르다면 return 0
  • 만약 깊이 우선 탐색이 끝이 아닐 때
    • 오른쪽 dfs 결과 + 왼쪽 dfs 결과

어려운점

  • 위 참고 블로그를 본 뒤 드는 생각은 정말 개념만 익힌 것이고 문제별로 구현하는 방식이 다르다. DFS 방식으로 풀어야 한다는 개념은 맞지만 각 문제 별로 적용해야할 방법이 다르다. 이걸 연습해야 할 듯

코드

public int solution(int[] numbers, int target) {
        return dfs(numbers, target, 0, 0);
    }

    public int dfs(int[] numbers, int target, int index, int sum) {
        if (index == numbers.length) {
            return (sum == target) ? 1 : 0;
        }
        return dfs(numbers, target, index+1, sum + numbers[index])
                + dfs(numbers, target, index+1, sum - numbers[index]);
    }