DFS로 풀었다
연속된 같은 팀의 개수를 세어 제곱한 값을 더해주면 된다.
문제를 잘못 읽어서 가로가 M 세로가 N인줄 알고 풀어서 계속 인덱스 에러가 났다...
문제를 잘 읽자
# 1303 전쟁-전투
import sys
input = sys.stdin.readline
dij = [[0,1],[-1,0],[0,-1],[1,0]]
def force(i, j):
global w, b
# 방문 표시
visited[i][j] = 1
for di, dj in dij:
ni = i + di
nj = j + dj
if ni < 0 or ni >= M or nj < 0 or nj >= N:
continue
if war[i][j] == 'W':
if war[ni][nj] == 'W' and not visited[ni][nj]:
w += 1
force(ni, nj)
elif war[i][j] == 'B':
if war[ni][nj] == 'B' and not visited[ni][nj]:
b += 1
force(ni, nj)
N, M = map(int, input().split())
war = [list(map(str, input().strip())) for _ in range(M)]
visited = [[0]*N for _ in range(M)]
my_team = 0
enemy = 0
w, b = 0, 0
for i in range(M):
for j in range(N):
# 전쟁터(war)가 W이고, 방문하지 않았으면
if war[i][j] == 'W' and not visited[i][j]:
w = 1
force(i, j)
my_team += w**2
# 전쟁터(war)가 B이고 방문하지 않았으면
elif war[i][j] == 'B'and not visited[i][j]:
b = 1
force(i, j)
enemy += b**2
w, b = 0, 0
print(my_team, enemy)
'Algorithm > 문제 풀이' 카테고리의 다른 글
[백준] # 2531 회전초밥 (1) | 2024.10.23 |
---|---|
[백준] # 11286 절댓값 힙(python) (0) | 2024.09.11 |
[백준] #1009 분산처리(Python) (3) | 2024.09.05 |
[SWEA] # 5207 이진탐색(binary search)(python) (3) | 2024.09.04 |
[백준] #2839 설탕 배달(python) (0) | 2024.09.04 |