알고리즘 공부/프로그래머스

(Java)프로그래머스 코딩테스트 연습 - 깊이/너비 우선 탐색(DFS/BFS) - 타겟 넘버

HRuler 2020. 10. 30. 09:06

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/43165?language=java

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+

programmers.co.kr

2. 나의 풀이

import java.util.*;

class Solution {
    
    ArrayList <Integer> all_case = new ArrayList <Integer>();
    
    public int solution(int[] numbers, int target) {
        int j = 0;
        int plus = 0;
        int minus = 0;
        imsi(plus, minus, j, numbers, target);
        return all_case.size();
    }
    void imsi(int plus, int minus, int j, int [] numbers, int target) {
    	if(j == numbers.length) {
    		if(plus == target) {
    			all_case.add(plus);
    			return;
    		}else if(minus == target) {
    			all_case.add(minus);
    			return;
    		}else {
    			return;
    		}
    	}
    	plus += numbers[j];
    	minus -= numbers[j];
    	//System.out.println("plus : " + plus + ", minus : " + minus);
    	imsi(plus, plus, j + 1, numbers, target);
    	imsi(minus, minus, j + 1, numbers, target);
    }
}

3. 다른 사람 풀이

class Solution {
    public int solution(int[] numbers, int target) {
        int answer = 0;
        answer = dfs(numbers, 0, 0, target);
        return answer;
    }
    int dfs(int[] numbers, int n, int sum, int target) {
        if(n == numbers.length) {
            if(sum == target) {
                return 1;
            }
            return 0;
        }
        return dfs(numbers, n + 1, sum + numbers[n], target) + dfs(numbers, n + 1, sum - numbers[n], target);
    }
}