문제 이름 : 타겟 넘버
<<< 문제 내용 >>>
function solution(numbers, target) {
let answer =0;
const operCall = {
'+' : (a, b) => a+b,
'-' : (a, b) => a-b
}
// 연산자 만들 갯수
const numberLen = numbers.length;
const operate = ['+','-'];
let operators = [];
const comb = (cnt, arr)=>{
if(cnt===numberLen){
operators.push([...arr]);
return;
}
for(let i=0;i<operate.length; i++){
comb(cnt+1, [...arr, operate[i]]);
}
}
comb(0, []);
let cnt =0;
for(let i=0; i<operators.length; i++){
let temp = [...numbers];
if(operators[i][0] === '-') temp[0] = -temp[0];
for(let j=1; j< numberLen; j++){
temp[j] = operCall[operators[i][j]](temp[j-1], temp[j]);
}
if(temp[numberLen-1] === target) cnt++;
}
return cnt;
}
* 백트래킹과 연산자를 끼워서 어떻게 처리할지만 잘 정하면 되는 문제입니다.
보통 저는 연산하는 문제에서는 const operCall 처럼 딕셔너리 내에 애로우 함수를 이용하여 가시적으로 처리합니다.
이런 문제를 몇 번 풀었더니 이젠 자동으로 코딩이 시작되는 것 같습니다.
잘 안풀릴 때는 노트에 흐름을 정리한 후, 유사한 문제를 몇 개 풀어보시면 도움이 될 것 같습니다.
도움이 되셨다면 공감 부탁드립니다.