728x90
문제
https://www.acmicpc.net/problem/14503
문제 해석
이 문제는 구현 문제이며, 방문 체크를 위한 배열 visited와 각각의 방향 체크를 위한 dx, dy로 분리해서 해결하였다.
문제의 요구사항대로 먼저 현재 위치 청소 여부를 확인하고 청소했으면 -1로 값을 변경한 후
각각의 방향을 검사하여 기계의 진행을 설정해 주었다.
풀이
const filePath = process.platform === "linux" ? "dev/stdin" : "../test.txt";
const input = require("fs").readFileSync(filePath).toString().trim().split("\n");
function solution(input) {
const [n, m] = input.shift().split(" ").map(Number);
let [x, y, d] = input.shift().split(" ").map(Number);
const arr = input.map((i) => i.split(" ").map(Number));
const visited = Array.from({ length: n }, () => Array.from({ length: m }, () => false));
const dx = [-1, 0, 1, 0];
const dy = [0, 1, 0, -1];
let ans = 0;
let cnt = 0;
while (1) {
if (!visited[x][y]) {
visited[x][y] = true;
arr[x][y] = -1;
ans++;
}
const [nextX, nextY] = [x + dx[(d + 3) % 4], y + dy[(d + 3) % 4]];
if (arr[nextX][nextY] === 0) {
x = nextX;
y = nextY;
cnt = 0;
} else {
cnt++;
}
d = (d + 3) % 4;
if (cnt === 4) {
const [backX, backY] = [x + dx[(d + 2) % 4], y + dy[(d + 2) % 4]];
if (arr[backX][backY] === 1) break;
else {
x = backX;
y = backY;
cnt = 0;
}
}
}
return ans;
}
console.log(solution(input));
끝
728x90
'WEB > 백준 문제 풀이' 카테고리의 다른 글
백준 3190번 뱀 (node.js) (0) | 2024.05.22 |
---|---|
백준 11536번 줄 세우기 (node.js) (0) | 2024.05.21 |
백준 2578번 덩치 (node.js) (0) | 2024.05.18 |
백준 2578번 빙고 (node.js) (0) | 2024.05.17 |
백준 2669번 직사각형 네개의 합집합의 면적 구하기 (node.js) (0) | 2024.05.15 |