과정
- R, G, B를 구분해서 영역 개수 구하기 & RG, B를 구분해서 영역 개수 구하기
- BFS로 풀 것이다.
- 정상인이 보는 답을 계산한 후, 2차원 리스트에서 G를 모두 R로 바꾼 후 적록색맹이 보는 답을 계산한다.
- 정상인 계산 후, 적록색맹 계산하기 전, visited 리스트 초기화하기.
from collections import deque
import sys
N = int(input())
map_lst = [list(input()) for _ in range(N)]
# 상 우 하 좌
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
def bfs_normal(x, y, target):
if visited[y][x]:
return False
queue = deque([[x, y]])
visited[y][x] = True
while queue:
a = queue.popleft()
x = a[0]
y = a[1]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < N and not visited[ny][nx] and map_lst[ny][nx] == target:
visited[ny][nx] = True
queue.append([nx, ny])
return True
# 정상인
visited = []
for i in range(N):
visited.append([False] * N)
ans_normal = 0
for i in range(N):
for j in range(N):
if bfs_normal(i, j, map_lst[j][i]):
ans_normal += 1
# 적록색맹
visited = []
for i in range(N):
visited.append([False] * N)
for i in range(N):
for j in range(N):
if map_lst[j][i] == "G":
map_lst[j][i] = "R"
ans_weak = 0
for i in range(N):
for j in range(N):
if bfs_normal(i, j, map_lst[j][i]):
ans_weak += 1
print(ans_normal, ans_weak)