
😎BACKJOON>4963번: 섬의 개수
📘 문제풀이
import sys
from collections import deque
while 1:
n, m = map(int, sys.stdin.readline().split())
if n == 0 and m == 0:
break
islands = [0] * m
for i in range(m):
islands[i] = list(map(int, sys.stdin.readline().split()))
visited = [[False] * n for _ in range(m)]
d = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (-1, -1), (1, -1), (-1, 1)]
q = deque()
answer = 0
for i in range(m):
for j in range(n):
if visited[i][j] == False and islands[i][j] == 1:
q.append((i, j))
while q:
px, py = q.popleft()
for k in range(8):
nx = px + d[k][0]
ny = py + d[k][1]
if nx < 0 or nx >= m or ny < 0 or ny >= n:
continue
if visited[nx][ny] == False and islands[nx][ny] == 1:
visited[nx][ny] = True
q.append((nx, ny))
answer += 1
print(answer)