티스토리 뷰

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

 

16929번: Two Dots

첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문

www.acmicpc.net

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

const [N, M] = input.shift().split(" ").map(Number);
const board = input.map((r) => r.split(""));

let visited = Array.from(Array(N), () => Array(M).fill(false));
const dx = [1, -1, 0, 0];
const dy = [0, 0, -1, 1];
let cycle = false;
let sx;
let sy;

const dfs = (x, y, px, py, cnt) => {
  if (cycle) return;

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

    if (
      nx < 0 ||
      nx >= N ||
      ny < 0 ||
      ny >= M ||
      board[nx][ny] != board[x][y] ||
      (nx == px && ny == py)
    )
      continue;

    if (!visited[nx][ny]) {
      visited[nx][ny] = true;
      dfs(nx, ny, x, y, cnt + 1);
      visited[nx][ny] = false;
    } else if (cnt >= 4 && visited[nx][ny]) {
      cycle = true;
      return;
    }
  }
};

for (let i = 0; i < N; i++) {
  for (let j = 0; j < M; j++) {
    visited[i][j] = true;
    dfs(i, j, -1, -1, 1);
    visited[i][j] = false;
    if (cycle) break;
  }
  if (cycle) break;
}

console.log(cycle ? "Yes" : "No");
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함