티스토리 뷰

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

 

12946번: 육각 보드

크기가 N × N인 육각 보드가 주어진다. 아래 그림은 N = 1, 2, 3, 4인 경우의 그림이다. 육각 보드의 일부 칸을 색칠하려고 한다. 두 칸이 변을 공유하는 경우에는 같은 색으로 칠할 수 없다. 어떤 칸

www.acmicpc.net

const fs = require("fs");
const input = fs.readFileSync("./dev/stdin").toString().trim().split("\n");
const N = +input.shift();
const board = input.map((v) => v.split(""));

let answer = 0;
const dx = [-1, -1, 0, 1, 1, 0];
const dy = [0, 1, 1, 0, -1, -1];

// 몇 개 칠해보니까 가장 많이 칠해봤자 3개임.

const dfs = (x, y, color) => {
  board[x][y] = color;
  answer = Math.max(answer, 1); // 일단 하나는 칠했다;;

  for (let k = 0; k < 6; k++) {
    const nx = x + dx[k];
    const ny = y + dy[k];
    if (nx < 0 || nx >= N || ny < 0 || ny >= N) continue;
    if (board[nx][ny] == "X") {// 아직 안 칠한거면 다른 색으로 칠해주자. 
      dfs(nx, ny, color == "A" ? "B" : "A");
      answer = Math.max(answer, 2);
      continue;
    }
    if (board[nx][ny] == color) { // 내 주변에 나랑 똑같은 색이 있다?? 그러면 내 색깔 바꿔야됨. 그럼 결국 3개를 칠해야됨, 
      process.exit(console.log(3)); // 3개 칠하면 그냥 끝내면됨. 
    }
  }
};

for (let i = 0; i < N; i++) {
  for (let j = 0; j < N; j++) {
    if (board[i][j] == "X") dfs(i, j, "A");
  }
}
console.log(answer);
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
글 보관함