백준/Search

[bfs/백준] 1303번 : 전쟁 - 전투

ydin 2022. 8. 10. 19:16

- 문제 : https://www.acmicpc.net/problem/18352

 

스스로 푼 문제이고, Silver Level 1 문제이다

W인 지역의 원소 갯수를 구한다음 그것의 제곱값을 answer 딕셔너리의 "W" key의 값에 누적한다

B인 지역도 마찬가지로 진행하면 된다 

 

- 정답 풀이 : 

from collections import deque

n,m = map(int,input().split())
data=[list(input()) for _ in range(m)]
visit = [[0] * n for _ in range(m)]
answer = {"W" : 0 , "B" : 0}

#방문하지 않은 흰색일 때 진행
#방문하지 않은 파란색일 때 진행 
def bfs(x,y,letter):
    queue=deque()
    queue.append((x,y))
    visit[x][y] = 1
    count = 1
    while queue:
        x,y = queue.popleft()
        for i in range(4):
            nx,ny = x + dx[i], y + dy[i]
            if 0 <= nx < m and 0 <= ny < n:
                if not visit[nx][ny] and data[nx][ny] == letter :
                    count += 1
                    visit[nx][ny] = 1
                    queue.append((nx,ny))
    answer[letter] += count*count  
    
dx = [-1,1,0,0]
dy = [0,0,-1,1]

for i in range(m):
    for j in range(n):
        if not visit[i][j]:
            bfs(i,j,data[i][j])
            
print(answer["W"],answer["B"])