알고리즘
[백준, 4963번] 섬의 개수
hminor
2023. 8. 20. 11:44
반응형
풀이
- 단순히 '상하좌우'만 탐색하는 문제가 아닌 대각선까지 탐색을 하는 문제이기에
- 좌표를 총 8개를 추가해 탐색하는 과정을 거쳤으며
- 입력이 계속 주어지고, 마지막에는 0,0 의 입력이 주어지기에
- 조건을 추가해 멈출 수 있도록 해결
import sys
from collections import deque
input = sys.stdin.readline
while True:
w,h = map(int,input().split())
if not w and not h: break
arr = [list(map(int,input().rstrip('\n').split())) for _ in range(h)]
visit = [[0]*w for _ in range(h)]
result = 0
for i in range(h):
for j in range(w):
if arr[i][j] and not visit[i][j]: # 방문하지 않은 땅
result += 1
q = deque([[i,j]])
visit[i][j] = 1
while q:
y,x = q.popleft() # bfs
for a,b in [[-1,0],[1,0],[0,-1],[0,1],[-1,-1],[-1,1],[1,1],[1,-1]]:
dy, dx = y+a, x+b
if 0<=dy<h and 0<=dx<w and arr[dy][dx] and not visit[dy][dx]:
q.append([dy,dx])
visit[dy][dx] = 1
print(result)