[9/3] 섬의 개수

이경준·2021년 9월 3일
0

코테

목록 보기
94/140
post-custom-banner

실버2 문제

내 코드

import sys
sys.setrecursionlimit(10000)

while True:
    w, h = map(int, input().split())
    if (w == 0 and h == 0):
        break
    
    arr = []
    cnt = 0

    for _ in range(h):
        arr.append(list(map(int, input().split())))

    def dfs(s, g):
        if (s < 0 or s >= h or g < 0 or g >= w):
            return False

        if arr[s][g] == 1:
            arr[s][g] = 0

            dfs(s-1, g-1)
            dfs(s-1, g)
            dfs(s-1, g+1)
            dfs(s, g-1)
            dfs(s, g+1)
            dfs(s+1, g-1)
            dfs(s+1, g)
            dfs(s+1, g+1)

            return True
        return False


    for i in range(h):
        for j in range(w):
            if (dfs(i, j) == True):
                cnt += 1

    print(cnt)

로직

  • 평범한 dfs 문제다. 다만 대각선을 고려해야 해서 8방향으로 탐색했다.
profile
The Show Must Go On
post-custom-banner

0개의 댓글