백준 2961번 Node.js 풀이

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]이든 결과값은 같으므로 서로 다른 인덱스값들을 구해주어야한다.