kokoball의 devlog
article thumbnail
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
profile

kokoball의 devlog

@kokoball-dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!