Sheba의 아메바

면접 대비

시간 제한2초메모리 제한512 MB

요약
고리가 겹치거나 맞닿지 않는 흑백 픽셀 패턴에서 닫힌 고리의 개수를 셉니다. 고리는 서로 다른 고리 안에 중첩될 수 있습니다.
난이도

보통10점 중 5점

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

문제

성공적인 Kickstarter 캠페인 덕분에 Sheba Arriba는 우편 주문 생물학 용품 회사를 세울 만큼의 자금을 모았다. "Sheba's Amoebas"는 작은 단세포 생물 군체가 이미 들어 있는 페트리 접시를 배송할 수 있다. 그런데 Sheba는 회사에서 보내는 아메바의 수를 확인할 방법이 필요하다. 각 접시마다 미리 처리된 흑백 이미지가 있는데, 이 이미지에서 각 아메바는 검은 픽셀의 단순 닫힌 고리로 나타난다. (고리는 검은 픽셀의 최소 집합으로, 집합 안의 각 픽셀이 정확히 두 개의 다른 픽셀과 인접한 것이다. 인접하다는 것은 픽셀의 변이나 꼭짓점을 공유한다는 뜻이다.) 이미지의 모든 검은 픽셀은 어떤 고리에 속한다.

Sheba는 직사각형 흑백 픽셀 배열에서 닫힌 고리의 수를 세는 프로그램을 원한다. 이미지의 두 닫힌 고리는 서로 닿거나 겹치지 않는다. 이웃을 둘러싸고 삼키는 것으로 알려진 특히 고약한 식인 아메바 종이 있어서, 아메바 안에 아메바가 있을 수 있다. 예를 들어, 그림 G.1의 각 이미지에는 아메바가 네 마리 있다.

그림 G.1: 아메바가 네 마리씩 있는 두 개의 페트리 접시.

입력

입력의 첫 줄에는 정수 m과 n이 주어진다. (1 ≤ m, n ≤ 100) 다음 m개의 줄에는 각각 n개의 문자가 주어진다. '#'은 검은 픽셀, '.'은 흰 픽셀을 나타낸다. 모든 검은 픽셀에 대해 여덟 개의 이웃 중 정확히 두 개가 검은색이다.

출력

입력에 있는 고리의 수를 나타내는 정수 하나를 출력한다.

예제2

  1. 예제 1

    입력
    12 12
    .##########.
    #..........#
    #..#...##..#
    #.##..#..#.#
    #......#.#.#
    #....#..#..#
    #...#.#....#
    #..#...#...#
    .#..#.#....#
    #....#.....#
    #.........#.
    .#########..
    
    예상 출력
    4
    
  2. 예제 2

    입력
    12 10
    .#####....
    #.....#...
    #..#..#...
    #.#.#.#...
    #..#..#...
    .#...#....
    ..###.....
    ......#...
    .##..#.#..
    #..#..#...
    .##.......
    ..........
    
    예상 출력
    4