문제 이해하기
- n개의 음이 아닌 정수를 적절히 더하거나 빼서 타겟 넘버를 만들어야 한다.
- 예를 들어 [1,1,1,1,1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있다.
데이터 추상화
- nunber 값이 배열로 들어온다. 배열들을 조합하여 원하는 결과를 낼 수 있기에 따로 추상화할 영역은 보이지 않는다.
알고리즘
- 적절히 더하거나 빼서 타겟 넘버를 만들어야 한다. 즉 더하기 빼기만 할 수 있다,
- 모든 경우의 수를 다 해보자. 즉 재귀 함수를 호출하여 타깃 넘버를 만들어 보자
const cal = (value, depth) => {
// 기저 사례 - 재귀함수는 배열의 길이가 되면 나온다
if(depth === numbers.length){
if( target === value){
answer++;
}
return;
}
// 더하기
cal( value + numbers[depth], depth+1);
// 빼기
cal( value - numbers[depth], depth+1);
}
구현
function solution(numbers, target) {
var answer = 0;
const cal = (value, depth) => {
if(depth === numbers.length){
if( target === value){
answer++;
}
return;
}
cal( value + numbers[depth], depth+1);
cal( value - numbers[depth], depth+1);
}
cal( 0 + numbers[0], 1);
cal( 0 - numbers[0], 1);
return answer;
}
정리 및 느낀 점
- 이번에 풀어본 문제는 다른 접근의 풀이였다. 배열을 직접 순회하는 형식이 아닌, 함수를 재귀적으로 호출하여 해결하는 방식의 풀이였다.
- +, - 이외에도 x, % 이 되어도 풀 수 있을 듯하다.
출처
https://programmers.co.kr/learn/courses/30/lessons/43165?language=javascript