[leetCode] Number of Islands

Kaydenna92·2023년 2월 3일
0

Algorithm

목록 보기
34/36

# 1은 육지, 0은 물, 
# 섬의 개수를 구하라. (연결 되어 있는 1의 덩어리 개수)

# 네 방향 각각 dfs 재귀를 이용해 탐색을 끝마치면 1이 증가하는 형식으로 육지의 개수를 파악 가능 할 듯.

# test case 1
# 출력 : 1
# arr = [
#     [1, 1, 1, 1, 0],
#     [1, 1, 0, 1, 0],
#     [1, 1, 0, 0, 0],
#     [0, 0, 0, 0, 0]
# ]

# test case 2
# 출력 : 3
arr = [
    [1,1,0,0,0],
    [1,1,0,0,0],
    [0,0,1,0,0],
    [0,0,0,1,1,]
]

def dfs(arr, i, k):
    # 범위를 벗어 나거나 육지가 아니면 종료
    if i < 0 or i >= len(arr) \
            or k < 0 or k >= len(arr[0]) \
                or arr[i][k] != 1:
        return

    arr[i][k] = 0 # 방문한 곳은 중복을 방지하기 위해 물로 갱신

    # 좌, 우, 상, 하 탐색
    dfs(arr, i + 1, k)
    dfs(arr, i - 1, k)
    dfs(arr, i, k + 1)
    dfs(arr, i, k - 1)


def main(arr):
    # 예외 처리
    if not arr:
        return 0

    count = 0
    for i in range(len(arr)):
        for k in range(len(arr[0])):
            if arr[i][k] == 1:
                dfs(arr, i, k) # 해당 위치에서 탐색할 수 있는 모든 육지를 탐색한 후, 카운트 1증가.
                count += 1
    return count

print(main(arr))


profile
persistently

0개의 댓글