반응형
코드
from collections import deque
import sys
sys.setrecursionlimit(10000)
def bfs(x,y):
queue = deque()
queue.append((x,y))
while queue:
x,y = queue.popleft()
visit[x][y] = True
color = graph[x][y]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<n and visit[nx][ny] == False:
if graph[nx][ny] == color:
bfs(nx,ny)
n = int(input())
graph = [list(input()) for _ in range(n)]
visit = [[False]*n for _ in range(n)]
dx = [-1,1,0,0]
dy = [0,0,-1,1]
count = 0
for i in range(n):
for j in range(n):
if visit[i][j] == False:
bfs(i,j)
count += 1
print(count,end=' ')
# 적록색약
for i in range(n):
for j in range(n):
if graph[i][j] == 'R':
graph[i][j] = 'G'
visit = [[False]*n for _ in range(n)]
count = 0
for i in range(n):
for j in range(n):
if visit[i][j] == False:
bfs(i,j)
count += 1
print(count)
설명
bfs를 사용하여 문제를 풀었다.
상하좌우 모두 확인을 해서 현재 찾고 있는 색과 동일하고 visit가 false인 경우가 있으면 queue에 넣어서 방문을 해줬다.
색맹의 경우 빨강과 초록을 구분하지 못하기 때문에 for문을 이용해서 빨간색을 모두 초록색으로 바꿔주고 위의 과정을 반복해주었다. 이때 visit는 다시 초기화시켜줘야 한다.
반응형
'알고리즘 > 그래프 탐색' 카테고리의 다른 글
[백준][Python] 1743번 음식물 피하기 (0) | 2022.12.20 |
---|---|
[백준][Python] 2583번 영역 구하기 (0) | 2022.12.01 |
[백준][Python] 14502번 연구소 (0) | 2022.11.09 |
[백준][Python] 1697번 숨바꼭질 (0) | 2022.10.26 |
[백준][Python] 4963번 섬의 개수 (0) | 2022.10.07 |
댓글