티스토리 뷰

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

 

2234번: 성곽

첫째 줄에 두 정수 N, M이 주어진다. 다음 M개의 줄에는 N개의 정수로 벽에 대한 정보가 주어진다. 벽에 대한 정보는 한 정수로 주어지는데, 서쪽에 벽이 있을 때는 1을, 북쪽에 벽이 있을 때는 2를,

www.acmicpc.net

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


const solve = (input) => {
  const dx = [0, -1, 0, 1];
  const dy = [-1, 0, 1, 0];

  const castle = input.map(v => v.split(' ').map(Number))
  const [W, H] = castle.shift();
  let visited = Array.from(Array(H), () => Array(W).fill(0));
  let area = 0;
  const sizes = [0];
  let maxSize = 0;
  for (let i = 0; i < H; i++) {
    for (let j = 0; j < W; j++) {
      if (!visited[i][j]) {
        let size = 1;
        area++;
        const q = [];
        q.push([i, j]);
        visited[i][j] = area;
        while (q.length > 0) {
          const [x, y] = q.shift();
          const wall = castle[x][y];
          for (let k = 0; k < 4; k++) {
            if (!(wall & (1 << k))) {
              const nx = x + dx[k]
              const ny = y + dy[k]
              if (nx >= 0 && ny >= 0 && nx < H && ny < W && !visited[nx][ny]) {
                q.push([nx, ny])
                visited[nx][ny] = area;
                size++;
              }
            }
          }
        }
        sizes.push(size);
      }
    }
  }

  // console.log(visited.map(v => v.join(' ')).join('\n'));


  for (let i = 0; i < H; i++) {
    for (let j = 0; j < W; j++) {
      const now = visited[i][j];
      const wall = castle[i][j];
      for (let k = 0; k < 4; k++) {
        if (wall & (1 << k)) {
          const ni = i + dx[k];
          const nj = j + dy[k];
          if (ni >= 0 && nj >= 0 && ni < H && nj < W && visited[ni][nj] != now) {
            const next = visited[ni][nj]
            let temp = sizes[now] + sizes[next];
            if (maxSize < temp) {
              maxSize = temp;
            }
          }
        }
      }
    }
  }
  console.log(area);// 이성에 있는 방의 개수
  console.log(Math.max(...sizes));
  console.log(maxSize)


}

solve(input);
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함