Potato

 

 

  • bfs를 통해 일반인은 같은 그림만 한 구역으로 보게, 적록색약은 R,G를 같은 구역으로 볼 수 있도록 하였다.

 

from collections import deque
import copy
N = int(input())
arr = [list(input()) for _ in range(N)]
acc = copy.deepcopy(arr) # 적록색약용 배열 복사본 생성
area = 0
def bfs(y,x,tmp,blind): # y,x,색깔,적록색약 유무
    q = deque([(y,x)])

    directy = [-1,1,0,0]
    directx = [0,0,-1,1]
    while q:
        y,x = q.popleft()

        for k in range(4):
            dy = directy[k] + y
            dx = directx[k] + x

            if dy >= N or dy < 0 or dx >= N or dx < 0:
                continue
            if blind == 1 and (tmp == 'R' or tmp == 'G'): # 적록색약이면서 구역의 색깔이 R이나 G이면
                if arr[dy][dx] != 'B' and arr[dy][dx] != 0: # R과 G는 같은 구역으로 본다
                    arr[dy][dx] = 0
                    q.append([dy,dx])

            elif arr[dy][dx] == tmp:
                arr[dy][dx] = 0
                q.append([dy,dx])

for j in range(N): # 일반인이 보는 구역 탐색
    for i in range(N):
        if arr[j][i] != 0:
            area += 1
            tmp = arr[j][i]
            bfs(j,i,tmp,0)

print(area)
area = 0 # 변수 초기화
arr = acc # arr을 초기배열로 초기화
for j in range(N): # 적록색약이 보는 구역 탐색
    for i in range(N):
        if arr[j][i] != 0:
            area += 1
            tmp = arr[j][i]
            bfs(j,i,tmp,1)
print(area)

+ Recent posts