반응형
풀이
- bfs를 사용해서 풀었으며
- 적록색약의 경우는 visit1과 bfs1로
- 아닐 경우엔 visit2와 bfs2로 풀 수 있도록 해결
import sys
from collections import deque
def bfs1():
while q:
y,x = q.popleft()
for ny,nx in [[-1,0],[1,0],[0,-1],[0,1]]:
dy,dx = y+ny,x+nx
if 0<=dy<n and 0<=dx<n and not visit1[dy][dx] and arr[y][x] == arr[dy][dx]:
visit1[dy][dx] = 1
q.append([dy,dx])
return
def bfs2():
while q:
y,x = q.popleft()
for ny,nx in [[-1,0],[1,0],[0,-1],[0,1]]:
dy,dx = y+ny,x+nx
if 0<=dy<n and 0<=dx<n and not visit2[dy][dx]:
if (arr[y][x] in ('R','G') and arr[dy][dx] in ('R','G')) or (arr[y][x] == 'B' and arr[dy][dx] == 'B'):
visit2[dy][dx] = 1
q.append([dy,dx])
return
input = sys.stdin.readline
n = int(input())
arr = [list(input().rstrip('\n')) for _ in range(n)]
visit1 = [[0]*n for _ in range(n)]
visit2 = [[0]*n for _ in range(n)]
result1,result2 = 0,0
q = deque([])
for i in range(n):
for j in range(n):
if not visit1[i][j]: # 적록색약 x
result1 += 1
visit1[i][j] = 1
q.append([i,j])
bfs1()
if not visit2[i][j]: # 적록색약 o
result2 += 1
visit2[i][j] = 1
q.append([i,j])
bfs2()
print(result1, end=' ')
print(result2)
'알고리즘' 카테고리의 다른 글
[백준, 파이썬 , 10817번] 세 수 (0) | 2023.08.28 |
---|---|
[백준, 2468번] 안전 영역 (2) | 2023.08.23 |
[백준, 13116번] 30번 (0) | 2023.08.21 |
[백준, 9372번] 상근이의 여행 (0) | 2023.08.21 |
[백준, 4963번] 섬의 개수 (0) | 2023.08.20 |