반응형
이 문제는 특별하게 대각선까지 확인해준다.
간단히 상하좌우에서 4좌표만 더 찍어주면 된다!
import sys
sys.setrecursionlimit(100000)
dx = [-1, 1, 0, 0, -1, -1, 1, 1]
dy = [0, 0, -1, 1, 1, -1, 1, -1]
def dfs(x, y, matrix):
matrix[x][y] = 0
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if (0 <= nx < h) and (0 <= ny < w) and (matrix[nx][ny] == 1):
dfs(nx, ny, matrix)
while True:
w, h = map(int, sys.stdin.readline().split())
if w == h == 0:
break
matrix = []
for _ in range(h):
matrix.append(list(map(int, sys.stdin.readline().split())))
cnt = 0
for i in range(h):
for j in range(w):
if matrix[i][j] == 1:
dfs(i, j, matrix)
cnt += 1
print(cnt)
이 문제를 풀면서 처음 알게된 정보가 있다.
바로 이 부분↓
sys.setrecursionlimit(100000)
저 코드를 넣지 않고 했을 때 이렇게 런타임에러가 뜬다ㅜ
서치를 해본 결과 재귀의 깊이 때문에 그렇다고 한다!
python3의 재귀의 깊이는 1000회 정도라고 한다. 내가 짠 코드의 재귀의 깊이가 1000회를 넘어서 에러가 난 거겠지??
이 코드를 통해 이 깊이제한을 풀어주는 것이다!
나중에 문제를 풀 때 유용하게 써먹을 것 같다.
간단한데 몰랐으면 한참 고민했을 것이다.
반응형
'알고리즘 > dfs,bfs' 카테고리의 다른 글
[파이썬🐍] 백준 1012 : 유기농 배추 (0) | 2021.05.30 |
---|---|
[파이썬🐍] 백준 7576 : 토마토 (0) | 2021.05.29 |
[파이썬🐍] 백준 2644 : 촌수계산 (0) | 2021.04.11 |
[파이썬🐍] 백준 10026 : 적록색약 (0) | 2021.04.10 |
[파이썬🐍] 백준 2583 : 영역 구하기 (0) | 2021.04.09 |
댓글