[문제]
n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[제한 사항]
- 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
- 각 숫자는 1 이상 50 이하인 자연수입니다.
- 타겟 넘버는 1 이상 1000 이하인 자연수입니다.
[내 풀이]
import java.util.*;
class Solution {
static int answer = 0;
public int solution(int[] numbers, int target) {
DFS(numbers,0,target,0);
return answer;
}
private static void DFS(int[] numbers, int depth, int target, int sum){
if(depth == numbers.length){
if(target == sum){
answer++;
}
}
else{
DFS(numbers,depth+1,target,sum+numbers[depth]);
DFS(numbers,depth+1,target,sum-numbers[depth]);
}
}
}
[풀이 과정]
깊이우선 탐색 너비우선탐색 둘다 푸는 방법이 있다고한다. 나는 깊이우선탐색(DFS)로 풀었다.
DFS함수를 재귀적으로 타고 들어가면서 깊이를 1씩 증가시켜 아래로 내려가게 한다.(물론 1차원 배열이지만 그렇게 생각하자)이후 "+"하는 경우와 "-"하는 경우를 각각 해주면서 sum이 target과 같아질 때 까지 재귀적으로 진행해 주는 것이다~
'문제풀이 > 프로그래머스' 카테고리의 다른 글
[JAVA] 압축 (0) | 2023.03.01 |
---|---|
[JAVA] k진수에서 소수 개수 구하기 (0) | 2023.03.01 |
[JAVA] 전화번호 목록 (0) | 2023.03.01 |
[JAVA] 귤 고르기 (0) | 2023.02.23 |
[JAVA] 둘만의 암호 (1) | 2023.02.21 |