백준 16948 JS 풀이

hun2__2·2023년 8월 13일
0

코딩테스트

목록 보기
42/48

구하는 값

데스 나이트로 갈 수 있음?

핵심 아이디어

데스 나이트 이동경로를 array로 만들고 상하좌우 돌릴때랑 똑같이 하면됨

(주의, y,x 주의할 것)

코드

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

class Que {
    q = [];
    h = 0;
    t = 0;
    enque(v) {
        this.q[this.t++] = v;
    }
    deque() {
        const v = this.q[this.h];
        delete this.q[this.h++];
        return v;
    }
    size() {
        return this.t - this.h;
    }
}

const dx = [-2, -2, 0, 0, 2, 2],
    dy = [-1, 1, -2, 2, -1, 1];

const n = Number(input[0]);
const [r1, c1, r2, c2] = input[1].split(" ").map(Number);
const graph = Array.from({ length: n }, () => new Array(n).fill(false));
let ans = -1;

const bfs = () => {
    const que = new Que();
    que.enque([c1, r1, 0]);
    graph[c1][r1] = true;
    while (que.size()) {
        const [y, x, dep] = que.deque();
        // console.log("y,x", y, x);
        if (y === c2 && x === r2) {
            ans = dep;
            break;
        }

        for (let i = 0; i < 6; i++) {
            const nx = x + dx[i],
                ny = y + dy[i];

            if (nx < 0 || nx >= n || ny < 0 || ny >= n) continue;

            if (!graph[ny][nx]) {
                que.enque([ny, nx, dep + 1]);
                graph[ny][nx] = true;
            }
        }
    }
};

bfs();
console.log(ans);
profile
과정을 적는 곳

0개의 댓글