반응형
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
코드
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 |
댓글