https://www.acmicpc.net/problem/10026
from collections import deque
n=int(input())
a=[list(list(input())) for _ in range(n)]
dx=[-1,1,0,0]
dy=[0,0,-1,1]
def can(blind,a,b):
if a==b:
return True
if blind:
if (a=='R' and b=='G') or (b=='R' and a=='G'):
return True
return False
def bfs(blind):
ans=0
check = [[False] * n for _ in range(n)]
for i in range(n):
for j in range(n):
if not check[i][j]:
q=deque()
q.append((i, j))
check[i][j]=True
c=a[i][j]
while q:
x,y=q.popleft()
for k in range(4):
nx,ny=x+dx[k],y+dy[k]
if 0<=nx<n and 0<=ny<n and not check[nx][ny]:
if can(blind,a[i][j],a[nx][ny]):
q.append((nx,ny))
check[nx][ny]=True
ans+=1
return ans
ans1=bfs(False)
ans2=bfs(True)
ans=[ans1,ans2]
print(*ans)
'코딩 테스트 > 백준 강의 연습편' 카테고리의 다른 글
BFS) 5014.스타트링크 (0) | 2022.06.11 |
---|---|
BFS) 14395. 4연산 (0) | 2022.06.11 |
BFS) 1963. 소수 경로 (0) | 2022.06.10 |
BFS) 6087.레이저 통신 (0) | 2022.06.09 |
시뮬레이션과 구현) 16974.레벨 햄버거 (0) | 2022.06.09 |