유전 탐사

면접 대비

시간 제한1초메모리 제한128 MB

요약
가로, 세로, 대각선으로 인접한 석유 구멍(@)을 하나의 덩어리로 볼 때, 격자에 있는 서로 다른 석유 덩어리의 개수를 센다. m이 0이면 입력이 끝난다.
난이도

보통10점 중 4점

유형
그래프, DFS, 행렬, 구현
정답자
아직 제출이 없습니다

문제

GeoSurvComp 지질 조사 회사는 지하 유전을 탐지하는 일을 합니다. 이 회사는 한 번에 하나의 큰 직사각형 토지를 다루며, 토지를 여러 개의 정사각형 구획으로 나누는 격자를 만듭니다. 그런 다음 감지 장비로 각 구획을 개별적으로 분석하여, 해당 구획에 석유가 있는지 없는지 판단합니다. 석유가 있는 구획을 포켓(pocket)이라고 부릅니다. 두 포켓이 인접해 있으면 두 포켓은 같은 유전에 속합니다. 유전은 매우 클 수 있으며 많은 포켓을 포함할 수 있습니다. 주어진 격자에 서로 다른 유전이 몇 개 있는지 구하세요.

입력

입력은 하나 이상의 격자로 이루어집니다. 각 격자의 첫 줄에는 격자의 행 수 mm과 열 수 nn이 공백 하나로 구분되어 주어집니다. m=0m = 0이면 입력의 끝을 의미하며, 그 외의 경우 1≤m≤1001 \le m \le 100, 1≤n≤1001 \le n \le 100입니다. 이어서 각 줄에 nn개의 문자가 있는 mm개의 줄이 주어집니다. 각 문자는 하나의 구획을 나타내며, 석유가 없음을 뜻하는 * 또는 석유 포켓을 뜻하는 @ 중 하나입니다.

출력

각 격자에 대해 서로 다른 유전의 개수를 한 줄에 하나씩 출력하세요. 두 포켓은 가로, 세로, 또는 대각선으로 인접해 있으면 같은 유전에 속합니다. 하나의 유전은 100개를 넘는 포켓을 포함하지 않습니다.

예제4

  1. 예제 1

    입력
    1 1
    *
    3 5
    *@*@*
    **@**
    *@*@*
    1 8
    @@****@*
    5 5
    ****@
    *@@*@
    *@**@
    @@@*@
    @@**@
    0 0
    
    예상 출력
    0
    1
    2
    2
    
  2. 예제 2

    입력
    1 1
    @
    0 0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    3 3
    @@@
    @@@
    @@@
    0 0
    
    예상 출력
    1
    
  4. 예제 4

    입력
    2 4
    ****
    ****
    0 0
    
    예상 출력
    0