알고리즘

[백준] 10026번(python 파이썬)

changha. 2022. 8. 2. 22:52
import sys
sys.setrecursionlimit(100000)
input = sys.stdin.readline
n = int(input())
##방문 했는지 안 했는지 구별 
visited = [[False] * n for _ in range(n)] 
##입력값 matrix 만들기
matrix = [list(input().rstrip()) for _ in range(n)]

##dfs 함수 만들기 
def dfs(x, y):
    cur_color = matrix[x][y]
    visited[x][y] = True
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]
    
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if 0 <= nx <= n - 1 and 0 <= ny <= n - 1 and visited[nx][ny] == False:
            if cur_color == matrix[nx][ny]:
                dfs(nx, ny)
            
three = 0
##적록색약 아닐 때 
for i in range(n):
    for j in range(n):
        if visited[i][j] == False:
            dfs(i, j)
            three += 1

##적록색약으로 바꾸기
for i in range(n):
    for j in range(n):
        if matrix[i][j] == 'R':
            matrix[i][j] = 'G'

visited = [[False] * n for _ in range(n)] 
two = 0            
##적록색약 일 때 
for i in range(n):
    for j in range(n):
          if visited[i][j] == False:
            dfs(i, j)
            two += 1

print(three, two)

sys.setrecursionlimit(100000)

이 부분 없이 계속 런타임 에러 뜨길래 

구글에 검색 해보니 

저 코드를 재귀 함수 일 때는 필수적으로 넣어야 된다고 합니다