728x90
from collections import deque
import copy
from pprint import pprint
N = int(input())

data = [list(input()) for x in range(N)]
rg_data = copy.deepcopy(data)

def bfs(r,c,rg):
    delta = [(0, 1), (0, -1), (1, 0), (-1, 0)]
    visited = [[0]*N for x in range(N)]
    visited[r][c] = 1

    if rg: # 적록색맹
        queue = deque([(r, c, rg_data[r][c])])

        while queue:
            cr, cc, color = queue.popleft()
            rg_data[cr][cc] = 'X'
            for dr, dc in delta:
                nr = cr + dr
                nc = cc + dc
                if 0 <= nr < N and 0 <= nc < N and not visited[nr][nc] and rg_data[nr][nc] != 'X':
                    if color in ['G', 'R'] and rg_data[nr][nc] in ['G', 'R']:
                        queue.append((nr, nc, rg_data[nr][nc]))
                        visited[nr][nc] = 1
                    elif color == 'B' and rg_data[nr][nc] == 'B':
                        queue.append((nr, nc, rg_data[nr][nc]))
                        visited[nr][nc] = 1
    else:
        queue = deque([(r, c, data[r][c])])

        while queue:
            cr, cc, color = queue.popleft()
            data[cr][cc] = 'X'
            for dr, dc in delta:
                nr = cr + dr
                nc = cc + dc
                if 0 <= nr < N and 0 <= nc < N and not visited[nr][nc] and data[nr][nc] == color:
                    queue.append((nr, nc, color))
                    visited[nr][nc] = 1

res = 0
res_rg = 0

for r in range(N):
    for c in range(N):
        if data[r][c] != 'X':
            bfs(r,c,0)
            res += 1


for r in range(N):
    for c in range(N):
        if rg_data[r][c] != 'X':
            bfs(r,c,1)
            res_rg += 1
print(res, res_rg)

'PS > Python' 카테고리의 다른 글

[BOJ_Python] 12967. pqr (미해결)  (0) 2021.03.28
[BOJ_Python] 2583. 영역 구하기  (0) 2021.03.22
[BOJ_Python] 17298. 오큰수  (0) 2021.03.11
[BOJ_Python] 1707. 이분 그래프  (0) 2021.03.10
[BOJ_Python] 2178. 미로 탐색  (0) 2021.03.07
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기