1. 문제
https://www.acmicpc.net/problem/10026
2. 풀이 방법
모든 row와 col 을 살펴보면서 해당 블록의 주변에 있는 요소들이 같은 색일 경우에 방문한 것으로 체크하고, dfs를 통하여 상하좌우 요소들을 모두 살펴봅니다.
3. 주의 사항
import sys
sys.setrecursionlimit(100000)
python은 재귀함수 호출 횟수가 제한되어 있어(1000회) 그 횟수를 늘려주기 위한 메소드를 사용해야 문제에서 런타임 에러가 나지 않습니다.
4. 소스코드
import sys
sys.setrecursionlimit(100000)
N = int(input())
sec_num = sec_num2 = 0
is_visited = [[0] * N for x in range(N)]
this_map = []
for i in range(N):
this_map.append([x for x in input()])
def confirm(row, col, now_color):
if row < 0 or row >= N or col < 0 or col >= N:
return
if is_visited[row][col] == 1:
return
if this_map[row][col] is now_color:
is_visited[row][col] = 1
confirm(row - 1, col, now_color)
confirm(row + 1, col, now_color)
confirm(row, col - 1, now_color)
confirm(row, col + 1, now_color)
else:
return
for row in range(N):
for col in range(N):
if is_visited[row][col] == 0:
confirm(row, col, this_map[row][col])
sec_num += 1
## init ##
for row in range(N):
for col in range(N):
if this_map[row][col] == 'R':
this_map[row][col] = 'G'
is_visited = [[0] * N for x in range(N)]
for row in range(N):
for col in range(N):
if is_visited[row][col] == 0:
confirm(row, col, this_map[row][col])
sec_num2 += 1
print(sec_num, sec_num2)