원본 그림에서 빨간색 -> 초록색으로 바꿔준 후, 적록색약인 경우의 구역 수를 구해서 원본일 때와 함께 출력하면 된다
bfs코드는 금방 다 짰는데, 적록색약 버전인 paint_tmp를 만드는 코드에서 원본 버전의 색을 바꿔버리는 코드를 짜서 괜한데서 시간을 허비했다
from collections import deque
n = int(input())
paint = [list(input()) for _ in range(n)]
paint_tmp = [[] for _ in range(n)]
for i in range(n):
for j in range(n):
if paint[i][j]=='R':
paint_tmp[i].append('G')
else:
paint_tmp[i].append(paint[i][j])
dx = [0,0,1,-1]
dy = [1,-1,0,0]
def bfs(graph, i, j):
q = deque()
q.append((i,j))
visited[i][j] = 1
while q:
x, y = q.popleft()
for k in range(4):
nx = x+dx[k]
ny = y+dy[k]
if 0<=nx<n and 0<=ny<n and not visited[nx][ny]:
if graph[x][y]==graph[nx][ny]:
visited[nx][ny] = 1
q.append((nx,ny))
visited = [[0]*n for _ in range(n)]
origin = 0
for i in range(n):
for j in range(n):
if not visited[i][j]:
bfs(paint, i, j)
origin += 1
visited = [[0]*n for _ in range(n)]
tmp = 0
for i in range(n):
for j in range(n):
if not visited[i][j]:
bfs(paint_tmp, i, j)
tmp += 1
print(origin, tmp)