알고리즘/백준

[백준] 1303 - 전쟁-전투 (파이썬)

소갱 2022. 2. 22. 11:44
from collections import deque
m, n = map(int,input().split())

array = []
for _ in range(n):
    array.append(list(input()))
q = deque()
visit = [[False for _ in range(m)] for _ in range(n)]
W, B = 0, 0
dx = [-1,0,1,0]
dy = [0,1,0,-1]
for a in range(n):
    for b in range(m):
        if visit[a][b] == False:
            if array[a][b] == 'W':
                visit[a][b] = True
                Wcnt = 1
                q.append([a,b])
                while q:
                    x,y = q.popleft()
                    for i in range(4):
                        nx = x + dx[i]
                        ny = y + dy[i]
                        if 0<=nx<n and 0<=ny<m:
                            if visit[nx][ny] == False and array[nx][ny] == 'W':
                                visit[nx][ny] = True
                                Wcnt += 1
                                q.append([nx,ny])
                W += Wcnt**2
            else:
                visit[a][b] = True
                Bcnt = 1
                q.append([a,b])
                while q:
                    x,y = q.popleft()
                    for i in range(4):
                        nx = x + dx[i]
                        ny = y + dy[i]
                        if 0<=nx<n and 0<=ny<m:
                            if visit[nx][ny] == False and array[nx][ny] == 'B':
                                visit[nx][ny] = True
                                Bcnt += 1
                                q.append([nx,ny])
                B += Bcnt**2

print(W,B)

0,0 인덱스부터 돌면서 BFS로 count 해주었다.