문제 : Programmers-타겟넘버
결국 주어진 numbers를 순서대로 + 한번, - 한번씩 모든 경우를 구해보면 된다. 이 경우 O(2^n)이 된다(+,-의 2가지 경우를 n번 봐야 하므로).
예를들어 numbers가 [1, 2, 3]일 경우 다음과 같이 진행된다.
이 중 target과 동일한 경우를 세서 return해주면 된다.
코드 : github
/**
* 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
*/
class Solution {
int cnt = 0;
private void rec(int[] numbers, int target, int idx, int sum) {
if (idx == numbers.length) {
if (sum == target)
cnt++;
return;
}
rec(numbers, target, idx+1, sum+numbers[idx]);
rec(numbers, target, idx+1, sum-numbers[idx]);
}
public int solution(int[] numbers, int target) {
rec(numbers, target, 0, 0);
return cnt;
}
}
'PS > Programmers' 카테고리의 다른 글
[자바] 프로그래머스 - 신고 결과 받기 (programmers java) (0) | 2022.05.01 |
---|---|
[자바] 프로그래머스 - 도둑질 (코딩테스트 연습 Lv4) (0) | 2022.04.21 |
[자바] 프로그래머스 - 가사 검색 [코딩테스트 연습 Lv4] (0) | 2022.04.10 |
[자바] 프로그래머스 - 모의고사 [코딩테스트 연습 Lv1] (0) | 2022.04.08 |
[자바] 프로그래머스 - 체육복 [코딩테스트 연습 Lv1] (0) | 2022.03.23 |
댓글