백준1952 / 달팽이2 / JS

Jihoo·2021년 9월 9일
0

Algorithm

목록 보기
8/16

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

가로, 세로가 다른 2차원 배열을 시계방향으로 순회합니다.

구현
표의 바깥 또는 이미 그려진 칸에 닿으면 시계방향으로 회전합니다.

출력
총 몇 번 회전했을까요?

const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = require('fs').readFileSync(filePath).toString().trim().split(' ');

let answer = 0;
const M = Number(input[0]);
const N = Number(input[1]);
const dr = [0, 1, 0, -1];
const dc = [1, 0, -1, 0];
let board = Array.from({ length: M }, () => Array(N).fill(0));
let direction = 0;
let count = M * N - 1;
let i = 0,
  j = 0;
board[i][j] = 1;
while (count-- > 0) {
  let ni = i + dr[direction];
  let nj = j + dc[direction];
  if (ni < 0 || nj < 0 || ni >= M || nj >= N || board[ni][nj] !== 0) {
    answer += 1;
    direction = (direction + 1) % 4;
    ni = i + dr[direction];
    nj = j + dc[direction];
  }
  [i, j] = [ni, nj];
  board[i][j] += 1;
}
console.log(answer);

0개의 댓글