function solution(numbers, target) {
var answer = 0;
let q = [];
q.push([0,0]); //value,index
while (q.length!==0) {
let value = q.shift(); // value[0] : 누적값,value[1]:index
// 현재 위치가 숫자의 최종길이와 같으면(사용 가능한 숫자 모두 사용)
if (value[1]===numbers.length){
if (value[0]===target) {
answer +=1
}
} else {
q.push([value[0]+numbers[value[1]],value[1]+1]);
q.push([value[0]-numbers[value[1]],value[1]+1]);
}
}
return answer;
}
function solution(numbers, target) {
var answer = 0;
function bfs (startIdx,numbers,target){
const queue = [];
queue.push([numbers[startIdx],-numbers[startIdx]]); //value,index
let idx = startIdx+1;
while (queue.length!==0) {
let value = queue.shift();
if (idx===numbers.length){
for (let num of value) {
if (num===target) {
answer++;
}
}
} else {
// 아직 마지막까지 모든 숫자를 사용하지 않았다.
let tmpList = [];
for (let num of value) {
tmpList.push(num+numbers[idx]);
tmpList.push(num-numbers[idx]);
}
idx++;
queue.push(tmpList)
}
}
return answer
}
answer= bfs(0,numbers,target)
return answer;
}
//너비 우선 방식 BFS
function solution(numbers, target) {
const result = numbers.reduce((all, n) => all.flatMap(v => [v+n, v-n]), [0]);
return result.filter(r => r === target).length;
}
정의 : 먼저 매핑함수를 사용해 각 엘리먼트에 대해 map 수행 후, 결과를 새로운 배열로 평탄화
let arr1 = [1, 2, 3, 4];
arr1.map(x => [x * 2]);
// [[2], [4], [6], [8]]
arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]
function solution(numbers, target) {
var answer = 0;
//dfs
function dfs(value,idx) {
if (idx===numbers.length) {
if (value ===target) {
answer+=1
return
}
}
else {
dfs(value+numbers[idx],idx+1)
dfs(value-numbers[idx],idx+1)
}
}
dfs(0,0)
return answer;
}