2024년 2월 12일
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("
");
const N = Number(input.shift());
const tasteArr = input.map((taste) => taste.split(" ").map(Number));
let result = [];
let visited = Array(N).fill(0);
let answer = Number.MAX_SAFE_INTEGER;
function dfs(depth, start) {
if (depth >= 1) {
let totalSour = 1;
let totalBitter = 0;
for (let i = 0; i < result.length; i++) {
let index = result[i];
let sour = tasteArr[index][0];
let bitter = tasteArr[index][1];
totalSour *= sour;
totalBitter += bitter;
}
answer = Math.min(answer, Math.abs(totalBitter - totalSour));
}
for (let i = start; i < N; i++) {
if (visited[i]) {
continue;
}
visited[i] = true;
result.push(i);
dfs(depth + 1, i + 1);
result.pop();
visited[i] = false;
}
}
dfs(0, 0);
console.log(answer);
여기서 depth 처리가 중요하다.
depth 를 기존 문제와 똑같이 N 과 같다고 해주었을때, 인덱스가 N만큼 다 채워졌을때만 결과값이 나오는데,
[0, 1, 2 3] 이든 [0, 3, 2, 1]이든 결과값은 같으므로 서로 다른 인덱스값들을 구해주어야한다.