만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

그리드 게임

면접 대비

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

요약
각 세포는 자신이나 상하좌우 이웃이 살아 있으면 다음 초에 살아난다. 이 확장을 K초 반복한 뒤 살아 있는 세포 수를 센다.
난이도

보통10점 중 6점

유형
시뮬레이션, BFS, 행렬, 구현
정답자
아직 제출이 없습니다

문제

무한히 넓은 그리드가 단위 정사각형 칸으로 나누어져 있다. 각 칸은 살아있거나 죽어있다.

매초 모든 칸의 상태가 다음 규칙에 따라 동시에 바뀐다.

  • 칸 CC 자신과 CC에 변을 맞댄 네 칸, 이 다섯 칸 중 하나라도 살아있으면 1초 뒤 CC는 살아있다.
  • 그렇지 않으면 1초 뒤 CC는 죽어있다.

처음 그리드의 상태가 주어졌을 때, KK초가 지난 뒤 살아있는 칸이 모두 몇 개인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 처음 상태가 주어지는 직사각형 영역의 행의 개수 NN과 열의 개수 MM이 주어진다. (1≤N,M≤501 \le N, M \le 50)

둘째 줄부터 NN개의 줄에 이 영역의 처음 상태가 한 줄에 MM글자씩 주어진다. 살아있는 칸은 o, 죽어있는 칸은 .이다. 영역 밖의 칸은 처음에 모두 죽어있다.

마지막 줄에 KK가 주어진다. (1≤K≤15001 \le K \le 1500)

출력

첫째 줄에 KK초가 지난 뒤 살아있는 칸의 개수를 출력한다.

힌트

처음 상태가 아래와 같고 K=3K = 3인 경우를 보자.

oo
o.

3초가 지난 뒤의 모습은 아래와 같다.

...oo...
..oooo..
.oooooo.
oooooooo
ooooooo.
.ooooo..
..ooo...
...o....

예제3

  1. 예제 1

    입력
    2 2
    oo
    o.
    3
    
    예상 출력
    36
    
  2. 예제 2

    입력
    2 2
    ..
    ..
    23
    
    예상 출력
    0
    
  3. 예제 3

    입력
    1 1
    o
    1000
    
    예상 출력
    2002001