문제
풀이
- 그래프 탐색 문제이다.
DFS 알고리즘
으로 접근하였다.
- 재귀 호출로인해 시간초과가 날 수 있어서
sys모듈
의 setresurionlimit함수
로 최대 재귀 깊이를 재설정하였다.
- 단지수 변수를 처음에 1로 설정해주어야 한다. (1부터 시작하기 때문)
코드
from sys import setrecursionlimit
setrecursionlimit(100000)
def dfs(x, y):
visited[x][y] = True
global cnt
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 and graph[nx][ny] == 1:
cnt += 1
dfs(nx, ny)
return cnt
if __name__ == '__main__':
n = int(input())
graph = [list(map(int, input())) for _ in range(n)]
visited = [[False] * n for _ in range(n)]
dx = [-1, 0, 0, 1]
dy = [0, -1, 1, 0]
cnt = 1
result = []
for x in range(n):
for y in range(n):
if visited[x][y] == False and graph[x][y] == 1:
danji = dfs(x, y)
if danji:
result.append(danji)
cnt = 1
print(len(result))
print('\n'.join(map(str, sorted(result))))
결과
출처 & 깃허브
BOJ 2667
GITHUB