티스토리 뷰

알고리즘/백준

백준2667[nodejs]단지번호붙이기

민트초코수장 2021. 2. 4. 00:39
const readline = require("readline");

let input = [];
let map = [];
let result = [];
let [total, count] = [0, 0];

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on("line", (line) => input.push(line.trim())).on("close", () => {
  const size = parseInt(input[0]);
  input.splice(0, 1);
  for (let i of input) {
    map.push(i.split("").map(Number));
  }
// 위는 입력받는 코드
  // 이차원 배열 전체를 검색하는 for문
  for (let x = 0; x < map.length; x++) {
    for (let y = 0; y < map[x].length; y++) {
      if (navi(x, y, size)) {
        total++;
        result.push(count);
        //count초기화
        count = 0;
      }
    }
  }
  //오름차순으로 정렬
  result.sort((a, b) => a - b);
  result.unshift(total);
  console.log(result.join("\n"));
});

const navi = (x, y, size) => {
  //지도의 크기 넘어가는 곳은 false
  if (x < 0 || x > size - 1 || y < 0 || y > size - 1) return false;
  //하나의 단지를 dfs로 계속 진행
  if (map[x][y] === 1) {
    count++;
    map[x][y] = 2;
    navi(x, y - 1, size);
    navi(x + 1, y, size);
    navi(x, y + 1, size);
    navi(x - 1, y, size);
    return true;
  }
  return false;
};

dfs를 이용해서 한 단지를 끝내면 dfs가 끝나고

count값이 나오면  result에 입력되고 초기화된다.

그리고 total이 카운트 된다.

 

마지막으로 total은 마지막에 첫번째 줄에 들어가게 하였다.

반응형

'알고리즘 > 백준' 카테고리의 다른 글

백준 7576 [nodejs] 토마토  (0) 2021.02.04
백준2178[nodejs] 미로 탐색  (0) 2021.02.04
백준1012[nodejs]유기농 배추  (0) 2021.02.04
백준2606[nodejs] 바이러스  (0) 2021.02.04
백준1260[nodejs] DFS와 BFS  (0) 2021.02.03
Comments