문제 번호 : 1182 번
문제 바로가기 ☞ https://www.acmicpc.net/problem/1182
<<< 문제 내용 >>>
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
const comb = (count, originArr, inArr) => {
if (count === -1) return;
if (inArr.length >= 1) {
if (inArr.reduce((a, b) => a + b) === target) cnt++;
}
for (let i = 0; i < originArr.length; i++) {
let temp = [];
temp = originArr.slice(i + 1);
inArr.push(originArr[i]);
comb(count - 1, temp, inArr);
inArr.pop();
}
};
let [arrLen, target] = input.shift().split(" ").map(Number);
let origin = input[0].split(" ").map(Number);
let cnt = 0;
comb(arrLen, origin, []);
console.log(cnt);
*조합으로 1개부터 5개까지 합친 값들을 뽑고, 값을 출력한다.
백트래킹이랑 섞은 문제이다. 이 문제가 어렵다면 재귀 순서를 노트에 적어가면서 연습하면 익숙해질 수 있다.
도움이 되셨다면 공감 부탁드립니다.