# dfs는 재귀적으로 상하좌우 계속 방문한다 모두 방문 하면 +1
# 00110
# 00011
# 11111
# 00000
def dfs(x, y):
# 주어진 범위를 벗어나는 경우 즉시 종료
if x<=-1 or x>=n or y<=-1 or y>=m:
return False
# 아직 방문하지 않았다면
if graph[x][y] == 0:
# 방문 처리
graph[x][y] = 1
# 현재 위치로부터 좌상우하 위치들도 모두 재귀적으로 호출
dfs(x-1,y)
dfs(x,y-1)
dfs(x+1,y)
dfs(x,y+1)
return True # 모두 방문했으면 True (아이스크림이 1 덩이 만들어 졌을시점)
return False
n, m = map(int, input().split()) # 행, 열 받고
graph = []
for i in range(n):
graph.append(list(map(int, input()))) # 행 만큼 리스트 넣음
cnt = 0
for i in range(n):
for j in range(m):
if dfs(i, j) == True:
print(i, j)
cnt += 1 # 아이스크림 1덩이 만들어질 때마다 ++1
print(cnt) # 결과
출처: https://www.youtube.com/watch?v=PqzyFDUnbrY&list=PLRx0vPvlEmdBFBFOoK649FlEMouHISo8N&index=3
'코딩 테스트 > 알고리즘' 카테고리의 다른 글
백준 1085 - 직사각형에서 탈출 (0) | 2023.05.23 |
---|---|
백준 18352 - 특정 거리의 도시 찾기 (0) | 2023.05.11 |
동빈나 파이썬 알고리즘 - 미로 탈출 (0) | 2023.05.07 |
가장 작은 양의 정수 구하기 (0) | 2022.12.18 |
이상한 문자 만들기 (프로그래머스) (0) | 2022.05.18 |