BOJ-16953 (A → B)

2022년 7월 27일

포인트

  • 최소값을 구하는 문제 이지만 dfs로 풀기도 가능

DFS 풀이

const fs = require("fs");
const [A, B] = fs
  .readFileSync("./test")
  .toString()
  .trim()
  .split(" ")
  .map((v) => Number(v));

const calc = [(v) => v * 2, (v) => Number(v + "1")];

let min = Infinity;

const dfs = (val, cnt) => {
  if (val > B) return;
  if (val === B) {
    min = Math.min(min, cnt);
    return;
  }

  calc.forEach((fn) => {
    dfs(fn(val), cnt + 1);
  });
};

dfs(A, 1);

console.log(min === Infinity ? -1 : min);

BFS 풀이

const fs = require("fs");
const [A, B] = fs
  .readFileSync("./test")
  .toString()
  .trim()
  .split(" ")
  .map((v) => Number(v));

const calc = [(v) => v * 2, (v) => Number(v + "1")];

const queue = [];

let min = Infinity;

const bfs = (startVal) => {
  queue.push({ v: startVal, c: 1 });

  while (queue.length) {
    const { v, c } = queue.shift();

    if (v > B) {
      continue;
    }

    if (v === B) {
      min = Math.min(c, min);
    }

    if (v < B) {
      calc.forEach((fn) => {
        queue.push({ v: fn(v), c: c + 1 });
      });
    }
  }
};

bfs(A);

console.log(min === Infinity ? -1 : min);