ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 섬나라 아일랜드
    Algorithm 2022. 7. 5. 14:50

    문제설명

    N*N의 섬나라 아일랜드의 지도가 격자판의 정보로 주어집니다. 각 섬은 1로 표시되어 상하좌 우와 대각선으로 연결되어 있으며, 0은 바다입니다. 섬나라 아일랜드에 몇 개의 섬이 있는지 구하는 프로그램을 작성하세요.

    입력설명

    첫 번째 줄에 자연수 N(3<=N<=20)이 주어집니다. 두 번째 줄부터 격자판 정보가 주어진다.

    출력설명

    첫 번째 줄에 섬의 개수를 출력한다.

    입력예제

    1 1 0 0 0 1 0

    0 1 1 0 1 1 0

    0 1 0 0 0 0 0

    0 0 0 1 0 1 1

    1 1 0 1 1 0 0

    1 0 0 0 1 0 0

    1 0 1 0 1 0 0

    출력예제 

    5

     

    풀이1) DFS

    function solution(n, ocean) {
      let answer = 0;
      const dx = [0, 1, 1, 1, 0, -1, -1, -1];
      const dy = [-1, -1, 0, 1, 1, 1, 0, -1];
      const check = ocean.map((v) => [...v]);
      function DFS(x, y) {
        for (let k = 0; k < 8; k++) {
          let nx = x + dx[k];
          let ny = y + dy[k];
          if (nx >= 0 && ny >= 0 && nx < n && ny < 7 && check[nx][ny] === 1) {
            check[nx][ny] = 0;
            DFS(nx, ny);
          }
        }
      }
      for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
          if (check[i][j] === 1) {
            DFS(i, j);
            check[i][j] = 0;
            answer++;
          }
        }
      }
      return answer;
    }

    풀이2) BFS

    function solution(n, ocean) {
      let answer = 0;
      const dx = [0, 1, 1, 1, 0, -1, -1, -1];
      const dy = [-1, -1, 0, 1, 1, 1, 0, -1];
      const check = ocean.map((v) => [...v]);
      let queue = [];
      for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
          if (check[i][j] === 1) {
            answer++;
            check[i][j] = 0;
            queue.push([i, j]);
            while (queue.length) {
              let [x, y] = queue.shift();
              for (let k = 0; k < 8; k++) {
                let nx = x + dx[k];
                let ny = y + dy[k];
                if (nx >= 0 && ny >= 0 && nx < n && ny < n && check[nx][ny] === 1) {
                  check[nx][ny] = 0;
                  queue.push([nx, ny]);
                }
              }
            }
          }
        }
      }
      return answer;
    }

    'Algorithm' 카테고리의 다른 글

    동전교환 (냅색알고리즘)  (0) 2022.07.06
    최대부분증가수열  (0) 2022.07.06
    송아지 찾기(BFS)  (0) 2022.07.05
    미로탐색 (DFS)  (0) 2022.07.05
    조합의 경우수(Memoization)  (0) 2022.06.28

    댓글

Designed by Tistory.