[boj] 14888. 연산자 끼워넣기 (node.js)

호이·2022년 1월 24일
0

algorithm

목록 보기
3/77
post-thumbnail

요약

N개의 숫자와 N-1개의 연산자가 주어질 때, 해당 숫자와 연산자로 만들어낼 수 있는 식을 무조건 앞에서부터(연산 우선순위 무시) 계산한 결과 중 최대, 최소값을 출력하라.

코드

// const fs = require("fs");
// const filePath = process.platform === "linux" ? "dev/stdin" : "input.txt";
// const stdin = fs.readFileSync(filePath).toString().split("\n");

// let cnt = 0;
// const input = () => {
//   return stdin[cnt++];
// };

const N = input();
const nums = input()
  .split(" ")
  .map((x) => parseInt(x));
const operators = input()
  .split(" ")
  .map((x) => parseInt(x));

function calculator(calculated, oper, newVal) {
  switch (oper) {
    case 0:
      return calculated + newVal;
    case 1:
      return calculated - newVal;
    case 2:
      return calculated * newVal;
    case 3:
      return Math.trunc(calculated / newVal);
    default:
      throw Error;
  }
}

let max = -1000000000,
  min = 1000000000;

function recFunc(k, value) {
  if (k == N - 1) {
    max = Math.max(max, value);
    min = Math.min(min, value);
  } else {
    for (let i = 0; i < 4; i++) {
      if (operators[i] > 0) {
        operators[i]--;
        recFunc(k + 1, calculator(value, i, nums[k + 1]));
        operators[i]++;
      }
    }
  }
  return [max, min];
}

console.log(recFunc(0, nums[0]).join("\n"));

강의 듣고 혼자 node.js 로 다시 풀어 본 코드

  • 문제에서 주어진 결과값의 범위인 +-10억을 각각 min, max로 선언, 할당해야 한다.
  • 조건에 맞는 경우 계속 탐색하다, 모든 k를 탐색했다면 계산 결과의 최대, 최소값을 갱신한다.

주절주절

  • 숫자가 N개이므로 연산자는 총 N-1개여서 탐색 완료 조건이 (k==N-1)인 걸 헷갈려서 k==N으로 둔 바람에 틀린 부분을 찾아 계속 헤맸다. 맞게 짠 것 같은데 계산이 안 될 땐 전체 구조, 특히 인덱싱부터 유의하고 차근차근 다시 살펴보기!
profile
매일 부활하는 개복치

0개의 댓글