4963: 섬의 개수

ewillwin·2023년 5월 7일
0

Problem Solving (BOJ)

목록 보기
49/230

import sys

dx = [0, 0, -1, 1, 1, -1, 1, -1]
dy = [-1, 1, 0, 0, 1, -1, -1, 1]

def dfs(x, y):
    global count

    if x < 0 or y < 0 or x >= h or y >= w:
        return

    if Map[x][y] == 1:
        count += 1
        Map[x][y] = 0
        for i in range(8): #주변탐색
            dfs(x + dx[i], y + dy[i])
  
while True:
    w, h = map(int, input().split(' ')); Map = []
    if w == 0 and h == 0: break
    else:
        for _ in range(h):
            tmp = list(map(int, sys.stdin.readline()[:-1].split(' ')))
            Map.append(tmp)

        count = 0; count_list = []
        for x in range(h):
            for y in range(w):
                if Map[x][y] == 1:
                    dfs(x, y)
                    count_list.append(count)
                    count = 0
        print(len(count_list))
  • 2중 for문을 돌며 Map이 1인 경우 dfs 순회 시작
  • Map 밖을 접근하는 경우 return
  • Map에서 해당 위치의 값이 1인 경우 count +=1을 해주고 해당 위치를 0으로 바꿔줌. 그 후 주변 (dx = [0, 0, -1, 1, 1, -1, 1, -1], dy = [-1, 1, 0, 0, 1, -1, -1, 1]) 탐색 시작
profile
Software Engineer @ LG Electronics

0개의 댓글