본문 바로가기
알고리즘/그래프 탐색

[백준][Python] 10026번 적록색약

by 임짠짠 2022. 11. 29.
반응형
 

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는 다시 초기화시켜줘야 한다.

반응형

댓글