[백준 14888번] 브루트포스 알고리즘 - 연산자 끼워넣기

김민지·2023년 10월 29일
0

냅다 시작 백준

목록 보기
102/118

✨ 문제 ✨


✨ 정답 ✨

const { notDeepEqual } = require("assert");
const { count } = require("console");
const fs = require("fs");
const { nextTick } = require("process");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./예제.txt";
let input = fs.readFileSync(filePath).toString().trim().split('\n');

// const fs = require('fs'); 
// let input = fs.readFileSync("/dev/stdin").toString().trim().split('\n');

const N = +input[0];
const numbers = input[1].split(" ").map(el=>+el);
const operator = input[2].split(" ").map(el=>+el);

const solution = (input) => {
  const operObj = {
    0: (oper1, oper2) => oper1 + oper2,
    1: (oper1, oper2) => oper1 - oper2,
    2: (oper1, oper2) => oper1 * oper2,
    3: (oper1, oper2) => {
      if (oper1 < 0) {
        return -Math.floor(-oper1 / oper2);
      }
      return Math.floor(oper1 / oper2);
    },
  };

  const temp = [];
  let min = Number.MAX_SAFE_INTEGER;
  let max = Number.MIN_SAFE_INTEGER;
  function dfs(count2) {
    if (count2=== N - 1) { 
      let oper1 = numbers[0];
      for (let i = 0; i < temp.length; i++) {
        let oper2 = numbers[i + 1];
        let idx = temp[i];
        oper1 = operObj[idx](oper1, oper2);
      }
      if (oper1 > max) max = oper1;
      if (oper1 < min) min = oper1;
    }

    for (let i = 0; i < 4; i++) {
      if (!operator[i]) continue;
      operator[i] -= 1;
      temp.push(i);
      dfs(count2 + 1);
      operator[i] += 1;
      temp.pop();
    }
  }
  dfs(0);

  return `${max}\n${min}`;
};

console.log(solution(input))

🧵 참고한 정답지 🧵

https://gobae.tistory.com/m/49?category=942780

💡💡 기억해야 할 점 💡💡

아니... 한 예제가 vscode에서도 안 돌아가고 메모리 초과가 뜨길래 답지를 봤다.
DFS로 풀어야 정상적으로 돌아가더라...

profile
이건 대체 어떻게 만든 거지?

0개의 댓글