- dfs를 이용한 풀이
- dfs()는 정상인 경우에 하나의 구역(빨간색 or 초록색 or 파란색)에 대해 0으로 값을 변경해주는 함수
- dfs_B()는 적록색약인 경우에 파란색 구역에 대해 0으로 값을 변경해주는 함수
- dfs_RG()는 적록색약인 경우에 빨간색 또는 초록색 구역에 대해 0으로 값을 변경해주는 함수
import sys
from collections import deque
import copy
sys.setrecursionlimit(10**6)
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
def dfs(x, y, color):
if x < 0 or y < 0 or x >= N or y >= N:
return
if grid[x][y] == color:
grid[x][y] = 0
for i in range(4):
dfs(x + dx[i], y + dy[i], color)
def dfs_B(x, y, color):
if x < 0 or y < 0 or x >= N or y >= N:
return
if origin_grid[x][y] == color:
origin_grid[x][y] = 0
for i in range(4):
dfs_B(x + dx[i], y + dy[i], color)
def dfs_RG(x, y, color):
if x < 0 or y < 0 or x >= N or y >= N:
return
if origin_grid[x][y] == 'R' or origin_grid[x][y] == 'G':
origin_grid[x][y] = 0
for i in range(4):
dfs_RG(x + dx[i], y + dy[i], color)
N = int(input())
origin_grid = []
for n in range(N):
origin_grid.append(list(sys.stdin.readline()[:-1]))
grid = copy.deepcopy(origin_grid)
normal_count = 0
for i in range(N):
for j in range(N):
if grid[i][j] != 0:
dfs(i, j, grid[i][j])
normal_count += 1
abnormal_count = 0
for i in range(N):
for j in range(N):
if origin_grid[i][j] == 'B':
dfs_B(i, j, origin_grid[i][j])
abnormal_count += 1
elif origin_grid[i][j] == 'R' or origin_grid[i][j] == 'G':
dfs_RG(i, j, origin_grid[i][j])
abnormal_count += 1
print(normal_count, abnormal_count)