문제
풀이
- 그래프 탐색 문제이다.
- DFS, BFS 중 DFS로 구현하였다.
- 그래프를 탐색 중, 현재 위치의 색과 상, 하, 좌, 우의 색이 같으면 같은 영역 처리로 처리하였다.
- 색맹인 경우에는 r==g이므로 g를 r로 치환하였다.
- DFS는 재귀호출을 하므로 시간 초과를 피하기위해
sys 모듈
의 setrecursionlimit
으로 최대 재귀깊이를 재설정하였다.
코드
from sys import stdin, setrecursionlimit
setrecursionlimit(100000)
input = stdin.readline
n = int(input())
graph = [list(map(str, input())) for _ in range(n)]
visited = [[False] * n for _ in range(n)]
dx = [-1, 0, 0, 1]
dy = [0, -1, 1, 0]
cnt = 0
result = []
def dfs(x, y):
visited[x][y] = True
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= n:
continue
if visited[nx][ny] == False:
if graph[x][y] == graph[nx][ny]:
dfs(nx, ny)
return False
for i in range(2):
for x in range(n):
for y in range(n):
if visited[x][y] == False:
dfs(x, y)
cnt += 1
result.append(cnt)
cnt = 0
if i == 1:
break
visited = [[False] * n for _ in range(n)]
for x in range(n):
for y in range(n):
if graph[x][y] == 'G':
graph[x][y] = 'R'
print(*result)
결과
출처 & 깃허브
BOJ 10026
github