BFS로 풀었다.
쭉~ 보면서 아직 방문 안한 곳이면 bfs로 상하좌우 4방향을 본다. 출발한 곳의 색깔과 같으면 개수를 더한다.
그래서 몇 명의 병사가 뭉쳐있는지 세고, 해당하는 팀에 힘(뭉친 수의 제곱!)을 더한다.
이미 센 병사는 또 세면 안 되니까 방문 체크
import collections
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
arr = list(list(input().strip()) for _ in range(M))
dir_x, dir_y = [0, 0, -1, 1], [-1, 1, 0, 0]
def bfs(i, j, color):
cnt = 1
q = collections.deque()
visited[i][j] = True
q.append((i, j))
while q:
ii, jj = q.popleft()
for k in range(4):
ni = ii + dir_x[k]
nj = jj + dir_y[k]
if 0 <= ni < M and 0 <= nj < N and visited[ni][nj] == False: # 범위, 방문 체크
if arr[ni][nj] == color:
cnt += 1
visited[ni][nj] = True
q.append((ni, nj))
return cnt ** 2
our_army_power = 0
their_army_power = 0
visited = [[False] * N for _ in range(M)]
for i in range(M):
for j in range(N):
if visited[i][j] == False:
power = bfs(i, j, arr[i][j])
if arr[i][j] == 'W':
our_army_power += power
else:
their_army_power += power
print(our_army_power, their_army_power)
728x90
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[백준- 파이썬] 11404: 플로이드 (0) | 2021.10.14 |
---|---|
[백준-파이썬] 2668: 숫자 고르기 (0) | 2021.10.13 |
[백준-파이썬] 23085: 판치기 (0) | 2021.10.12 |
[SWEA-파이썬] 2105: 디저트 카페 (0) | 2021.10.12 |
[백준-파이썬] 11559: Puyo Puyo (0) | 2021.10.11 |