https://www.acmicpc.net/problem/4963
import sys
read = sys.stdin.readline
sys.setrecursionlimit(10000)
def dfs(x,y,visit,arr):
visit[x][y] = True
dx = [0,0,1,-1,-1,-1,1,1]
dy = [1,-1,0,0,-1,1,-1,1]
for i in range(len(dx)):
nx = dx[i] + x
ny = dy[i] + y
if (0 <= nx < len(arr)) and (0 <= ny < len(arr[0])):
if arr[nx][ny] == 1 and visit[nx][ny] == False:
dfs(nx,ny,visit,arr)
while True:
arr = []
n,m = map(int,input().split())
if n == 0 and m == 0:
break
for _ in range(m):
arr.append(list(map(int, read().split())))
visit = [[False] * n for _ in range(m)]
count = 0
for i in range(len(arr)):
for j in range(len(arr[0])):
if visit[i][j] == False:
if arr[i][j] == 1:
dfs(i,j,visit,arr)
count += 1
print(count)
해당 문제는 dfs의 상,하,좌,우에 대각선만 추가해주면 끝이난다.
그리고 while이 True로 무한반복인점을 고려해 탈출조건을 명확히 무조건 명시해줘야 한다.
'알고리즘' 카테고리의 다른 글
React)경고- react_devtools_backend.js:4012 Warning: You provided a `checked` prop to a form field without an `onChange` handler. (0) | 2023.02.07 |
---|---|
프로그래머스)[1]차 다트 게임-pyhton (0) | 2023.02.07 |
백준10815)숫자카드-pyhton (0) | 2023.02.06 |
백준1654)랜선 자르기-python (0) | 2023.02.06 |
백준)숫자카드-python (0) | 2023.02.06 |