**백준 문제 링크
전쟁 - 전투
- BFS를 사용했다.
- bfs 함수의 인자를 x,y,color로 설정한다.
cnt(병사의 수)를 1 증가시키고,
lst[nx][ny]의 인덱스가 범위 내에 있고,
이전의 색깔(color)과 같으면 방문 처리하고, queue에 넣는다.- 2개의 for문으로 lst를 돌면서
lst[nx][ny]가 'W'이면 white에 (bfs(i,j,'W') 2)를 더하고
lst[nx][ny]가 'B'이면 blue에 (bfs(i,j,'B') 2)를 더한다.- 마지막으로 white와 blue를 반환하면 끝
from collections import deque
M,N = map(int, input().split())
lst = []
for i in range(N):
lst.append(list(input()))
dx = [0,0,1,-1]
dy = [1,-1,0,0]
white, blue = 0,0
def bfs(x,y, color):
queue = deque()
queue.append((x,y))
lst[x][y] = 0
cnt = 0 # 병사
while queue:
x,y = queue.popleft()
cnt += 1
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if (0<=nx<N) and (0<=ny<M) and (lst[nx][ny] == color):
lst[nx][ny] = 0
queue.append((nx,ny))
return cnt
white, blue = 0,0
for i in range(N):
for j in range(M):
if lst[i][j] == 'W':
white += (bfs(i,j,'W') ** 2)
elif lst[i][j] == 'B':
blue += (bfs(i,j,'B') ** 2)
print(white,blue)
주의할 점은 가로 크기가 N, 세로 크기가 M 이므로 인덱스에 주의해야 한다.