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);