본문 바로가기
코딩테스트/프로그래머스

[DFS/BFS] 타켓 넘버 - JAVA

by 의정부핵꿀밤 2022. 7. 13.
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


이제 DFS/BFS 문제 보면 아 이거 DFS다 이정도 감은 온다

근데 어떻게 쓰지...?에서 항상 고장남🤓

 

그래도 막 어렵진 않았고 다른 풀이 살짝 참고해서 풀었다..^^

 

dfs는 주로 재귀함수로 구현되기 때문에 탈출 조건이 필요하다

그래서 depth 라는 변수를 이용해서 numbers의 마지막 노드일 경우 지금까지 더한 값인 sum과 target을 비교하여 같으면 answer를 1씩 더해주도록 하였다

 

그리고 마지막 노드가 아니라면 다음 노드를 탐색해야 하기 때문에 재귀호출을 하는데, 여기서 현재 값의 부호가 +인지 -인지에 따라 달라지기 때문에 2가지를 모두 호출한다

 

이게 끝임...ㅎㅎ

아무래도 레벨 2라 그런지 엄청 어렵진 않은듯!

근데 왜 혼자 못푸냐고 엉엉😭

 

 

 

자바 코드)

public class Solution {
    static int answer = 0;
    
    public int solution(int[] numbers, int target) {
        dfs(numbers, target, 0, 0);
        return answer;
    }
    public static void dfs(int[] numbers, int target, int depth, int sum) {
        if(numbers.length == depth) { //마지막 노드 탐색
            if(sum==target) {
                answer++;
            }
        } else {
            dfs(numbers, target, depth+1, sum+numbers[depth]);
            dfs(numbers, target, depth+1, sum-numbers[depth]);
        }
    }
}
728x90

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[DP] 등굣길 - JAVA  (0) 2022.07.16
[DFS/BFS] 네트워크 - JAVA  (0) 2022.07.14
[DP] 정수 삼각형 - JAVA  (0) 2022.07.13
[DP] N으로 표현 - JAVA  (0) 2022.07.11
[탐욕법(Greedy)] 구명보트 - JAVA  (0) 2022.06.17

댓글