import sys
sys.setrecursionlimit(5000000)
def dfs(x, y):
if 0 <= x < h and 0 <= y < w:
if graph[x][y] == 1:
graph[x][y] = 2
dfs(x-1, y-1)
dfs(x-1, y)
dfs(x-1, y+1)
dfs(x, y-1)
dfs(x, y+1)
dfs(x+1, y-1)
dfs(x+1, y)
dfs(x+1, y+1)
print(graph)
return True
return False
while True:
w, h = map(int, input().split())
#종료 조건(0 0을 입력하면 종료)
if w == 0 and h == 0:
break
#2차원 그래프 입력 받기
graph = [list(map(int, input().split())) for _ in range(h)]
cnt = 0
# 1인 경우 DFS 실행해서 상하좌우 대각선을 확인해주고
# 연결 된 부분을 2로 만들어서 다시 확인 하지 않아도 되게 한 뒤
# 섬의 개수를 담을 변수 cnt에 1을 더해준다.
# 이때 다음 그래프에 1이었던 것은 2로 변화했기 때문에 조건에 부합하지 않음
# 그래서 확인하지 않고 넘어간다.
for i in range(h):
for j in range(w):
if graph[i][j] == 1:
dfs(i, j)
cnt += 1
print(cnt)
#DFS로 푼 문제
import sys
sys.setrecursionlimit(5000000)
input = sys.stdin.readline
import sys
sys.setrecursionlimit(5000000)
def dfs(x, y):
if 0 <= x < h and 0 <= y < w:
if graph[x][y] == 1:
graph[x][y] = 2
dfs(x-1, y-1)
dfs(x-1, y)
dfs(x-1, y+1)
dfs(x, y-1)
dfs(x, y+1)
dfs(x+1, y-1)
dfs(x+1, y)
dfs(x+1, y+1)
return True
return False
while True:
w, h = map(int, input().split())
#종료 조건(0 0을 입력하면 종료)
if w == 0 and h == 0:
break
#2차원 그래프 입력 받기
graph = []
for _ in range(h):
graph.append(list(map(int, input().split())))
cnt = 0
# 1인 경우 DFS 실행해서 상하좌우 대각선을 확인해주고
# 연결 된 부분을 2로 만들어서 다시 확인 하지 않아도 되게 한 뒤
# 섬의 개수를 담을 변수 cnt에 1을 더해준다.
# 이때 다음 그래프에 1이었던 것은 2로 변화했기 때문에 조건에 부합하지 않음
# 그래서 확인하지 않고 넘어간다.
for i in range(h):
for j in range(w):
if graph[i][j] == 1:
dfs(i, j)
cnt += 1
print(cnt)
#그래프 2차원 배열에 값 넣는 과정이 같은데 다르게 씀
# 기존의 문제들은 상하좌우만 확인하게 했지만 이번 문제는 대각선도 추가 됨
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][구현] 2558. A+B - 2(파이썬/Python) (0) | 2021.10.27 |
---|---|
[백준][구현] 10817. 세 수(파이썬/Python) (0) | 2021.10.27 |
[백준][DFS/BFS] 2606. 바이러스 (파이썬/Python) (0) | 2021.10.23 |
[백준][스택] 9012. 괄호(파이썬/Python) (0) | 2021.10.22 |
[백준][스택] 10773. 제로 (파이썬/Python) (0) | 2021.10.22 |