이번 문제는 깊이우선탐색을 통해 해결하였다. 4가지 이동 방향을 따로 관리하여 모든 방향으로의 경우에 대해서 재귀호출을 통해 그리드에 #를 없애는 과정을 반복하고 재귀함수를 처음 호출할 때에 카운팅 변수를 증가시켜주며 카운팅을 하였다. 다른 깊이우선탐색 문제와 유사한 문제였다. 재귀 에러가 발생하여서 sys.setrecursionlimit(10**9)
를 사용해주었다.
grid[y][x]
를 '.'으로 갱신한다.y+dy[i]
로 선언한다.x+dx[i]
로 선언한다.grid[ny][nx]
가 '#'일 경우 dfs(ny, nx)
를 재귀호출한다.grid[i][j]
가 '#'일 경우,dfs(i, j)
를 호출한다.import sys
sys.setrecursionlimit(10**9)
def dfs(y, x):
grid[y][x]='.'
dy=[0, 0, -1, 1]
dx=[-1, 1, 0, 0]
for i in range(4):
ny=y+dy[i]
nx=x+dx[i]
if ny>=0 and nx>=0 and ny<h and nx<w and grid[ny][nx]=='#':
dfs(ny, nx)
t=int(input())
for _ in range(t):
h, w=map(int, input().split())
grid=[]
cnt=0
for _ in range(h):
grid.append(list(str(input())))
for i in range(h):
for j in range(w):
if grid[i][j]=='#':
dfs(i, j)
cnt+=1
print(cnt)