- 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)
'Python > 백준' 카테고리의 다른 글
[백준/Python] 1916 최소비용 구하기 (0) | 2022.10.01 |
---|---|
[백준/Python] 13549 숨바꼭질 3 (0) | 2022.10.01 |
[백준/Python] 4963 섬의 개수 (1) | 2022.09.30 |
[백준/Python] 11724 연결 요소의 개수 (0) | 2022.09.30 |
[백준/Python] 2178 미로 탐색 (2) | 2022.09.29 |