Algorithm/프로그래머스
[프로그래머스] 타겟넘버 (Javascript)
GrapeMilk
2021. 11. 5. 19:05
문제링크 ( https://programmers.co.kr/learn/courses/30/lessons/43165 )
내 풀이
- 재귀를 돌면서 operation 배열안에 +또는 -를 numbers만큼 채운다. (countWaysToMakeTarget)
- numbers만큼 채운 뒤에는 채워진 opertaion으로 숫자를 계산한다 (getCalculatedNumber)
- 계산한 숫자가 target과 같으면 answer을 증가시킨다.
function mySolution(numbers, target) {
var answer = 0;
const getCalculatedNumber = (operatorArr) =>
numbers.reduce((pre, cur, idx) =>
operatorArr[idx] === "+" ? pre + cur : pre - cur
, 0);
const countWaysToMakeTarget = (arr, cnt) => {
if (cnt === numbers.length) {
if (getCalculatedNumber(arr) === target) answer++;
return;
}
arr[cnt] = "+";
countWaysToMakeTarget(arr, cnt + 1);
arr[cnt] = "-";
countWaysToMakeTarget(arr, cnt + 1);
}
let initOperatorArr = new Array(numbers.length).fill("+");
countWaysToMakeTarget(initOperatorArr, 0)
return answer;
}
다른사람 풀이
- 연산자들을 따로 저장하지않고, 재귀를 탈 때 마다 sum을 합산하는 면에서 내 풀이보다 훨씬 효율적.
function goodSolution(numbers, target) {
let answer = 0;
function p(step, sum) {
if (step === numbers.length) {
if (sum === target) {
answer += 1;
}
return;
}
p(step + 1, sum + numbers[step]);
p(step + 1, sum - numbers[step]);
}
p(0, 0);
return answer;
}