문제
from collections import deque
import sys
dr = [-1, 1, 0, 0, -1, 1, -1, 1]
dc = [0, 0, -1, 1, -1, 1, 1, -1]
def bfs(x, y):
queue.append((x, y))
m[x][y] = cnt
while queue:
x, y = queue.popleft()
for i in range(8):
nx = x + dr[i]
ny = y + dc[i]
if 0 <= nx < h and 0 <= ny < w and m[nx][ny] == 1:
m[nx][ny] = cnt
queue.append((nx, ny))
while True:
w, h = map(int, sys.stdin.readline().split())
m = [[0] * w for i in range(h)]
queue = deque()
if w == h == 0:
break
for i in range(h):
line = list(map(int, sys.stdin.readline().split()))
for j in range(w):
m[i][j] = line[j]
cnt = 2
for i in range(h):
for j in range(w):
if m[i][j] == 1:
bfs(i, j)
cnt += 1
print(cnt-2)
대각선으로도 갈 수 있어서 8개 지정해줬고
cnt를 2로 설정해놓아서 1이랑 헷갈리지 않게 설정, 이후에 프린트 할 때는 2를 빼줬다
'공부하자! > 알고리즘' 카테고리의 다른 글
백준 2309 일곱 난쟁이 파이썬 (0) | 2021.11.04 |
---|---|
프로그래머스 | 거리두기 확인하기 (0) | 2021.09.10 |
백준 7576번 토마토 파이썬 - bfs (0) | 2021.09.09 |
백준 1012번 유기농 배추 파이썬 - bfs (0) | 2021.09.09 |
백준 2667번 단지번호붙이기 파이썬 (0) | 2021.09.07 |