백준 1963 nodejs

윤익·2022년 10월 26일
0

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

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

function diff(a, b) {
  let cnt = 0
  for (let i = 0; i < 4; i++) a[i] !== b[i] && cnt++
  return cnt
}

const T = +input[0]
const answer = new Array(T).fill('Impossible')
const [not, pNum] = [{}, {}]

for (let i = 2; i < 10000; i++) {
  if (not[i]) continue
  if (i >= 1000) pNum[i] = new Set()
  for (let j = 2; i * j < 10000; j++) not[i * j] = true
}
for (const a in pNum) {
  for (const b in pNum) {
    if (diff(a, b) === 1) {
      pNum[a].add(b)
      pNum[b].add(a)
    }
  }
}
// 주어진 조건으로 그래프 생성

for (let i = 1; i <= T; i++) {
  const [start, end] = input[i].split(' ')
  const queue = [[start, 0]]
  const visited = new Set()
  while (queue.length) {
    const [curr, num] = queue.shift()
    if (visited.has(curr)) continue
    visited.add(curr)
    if (curr === end) {
      answer[i - 1] = num
      break
    }
    for (const next of pNum[curr]) {
      if (!visited.has(next)) queue.push([next, num + 1])
    }
  }
}
// bfs로 생성한 그래프 탐색

console.log(answer.join('\n'))
profile
https://nickyoon.tistory.com/ 기술 블로그 이전

0개의 댓글