본문 바로가기
알고리즘/dfs,bfs

[파이썬🐍] 백준 4963 : 섬의 개수

by 코딩개미뚠뚠 2021. 4. 12.
반응형

이 문제는 특별하게 대각선까지 확인해준다.

간단히 상하좌우에서 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회를 넘어서 에러가 난 거겠지??

이 코드를 통해 이 깊이제한을 풀어주는 것이다!

 

나중에 문제를 풀 때 유용하게 써먹을 것 같다.

간단한데 몰랐으면 한참 고민했을 것이다.

 

반응형

댓글