Data Structure & Algorithm/문제풀이 & 코딩테스트
[이것이취업을위한코딩테스트다] Chap05 - 음료수 얼려 먹기
데이터 사이언스
2022. 2. 16. 19:45
DFS/BFS 실전문제 - 음료수 얼려먹기
위와 같이 N X M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분끼리 상,하,좌,우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다. 이 때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하시오. 위와 같은 얼음 틀 예시에서는 아이스크림이 총 3개 생성된다.
입력조건, 출력조건, 입력예시는 다음과 같다.
n, m = map(int, input().split())
graph = []
for i in range(n):
graph.append(list(map(int, input())))
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
return False
result = 0
for i in range(n):
for j in range(m):
if dfs(i, j) == 1:
result += 1
print(result)
문제의 접근 방법
1) dfs를 활용해 탐색 수행
2) 해당 지점의 인접 노드를 탐색했을 때 0이면(얼음이 될 수 있는 부분)서 방문하지 않은 지점이 있다면 해당 지점 방문
3) 방문한 지점에서 다시 상,하,좌,우를 살피면서 재귀 수행
4) 모든 노드에 반복하며 방문하지 않은 지점의 수를 센다.