본문 바로가기

Algorithm/문제 풀이

[백준] # 1303 전쟁-전투(python)

 

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)