문제
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은 구역에 속한다. (색상의 차이를 거의 느끼지 못하는 경우도 같은 색상이라 한다) 적록색약인 사람이 봤을 때와 아닌 사람이 봤을 때 구역의 수를 구하는 프로그램을 작성하시오.
input
5
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
output
4 3
import sys
def bfs(color, i, j):
q = [(i, j)]
while len(q) != 0:
pos = q.pop(0)
x = pos[0]
y = pos[1]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if -1 < nx < n and -1 < ny < n and arr[nx][ny] in color and not visited[nx][ny]:
visited[nx][ny] = True
q.append((nx, ny))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
n = int(input())
arr = [list(map(lambda x : list(x), sys.stdin.readline().split()))[0] for _ in range(n)]
visited = [[False] * n for _ in range(n)]
nblind = 0
for i in range(n):
for j in range(n):
if not visited[i][j]:
visited[i][j] = True
bfs(list(arr[i][j]), i, j)
nblind += 1
visited = [[False] * n for _ in range(n)]
blind = 0
for i in range(n):
for j in range(n):
if not visited[i][j]:
visited[i][j] = True
if arr[i][j] == 'R' or arr[i][j] == 'G':
bfs(['R', 'G'], i, j)
else:
bfs(['B'], i, j)
blind += 1
print(nblind, blind)