Coding Test/Practice

백준 16953번 A -> B JavaScript 풀이 [BFS]

yunicornlab 2024. 7. 27. 03:39
반응형

백준 16953번 A -> B 문제를 자바스크립트로 BFS 알고리즘을 이용해서 풀어보았다. 

https://www.acmicpc.net/problem/16953

 

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

class Queue {
  constructor() {
    this.items = {};
    this.head = 0;
    this.tail = 0;
  }
  enqueue(element) {
    this.items[this.tail] = element;
    this.tail++;
  }
  dequeue() {
    const element = this.items[this.head];
    delete this.items[this.head];
    this.head++;
    return element;
  }
  getLength() {
    return this.tail - this.head;
  }
}

let [a, b] = input[0].split(' ').map(Number);
let visited = new Set([a]);
queue = new Queue();
queue.enqueue([a, 1]);

let result = -1;
while (queue.getLength() != 0) {
  let [x, count] = queue.dequeue();
  let next;

  for (let i=0; i<2; i++) {
    if (i == 0) next = x * 2;
    else next = Number(x.toString() + "1");

    if (!visited.has(next) && next <= b) {
      visited.add(next)
      queue.enqueue([next, count + 1])
      if (next == b) {
        result = count;
        break;
      }
    }
  }
}

console.log(result == -1 ? -1 : result + 1)

 

 

반응형