깡뇽

[코테] DFS/BFS 문제풀기 - 음료수 얼려 먹기 본문

Algorithm/Coding Test

[코테] DFS/BFS 문제풀기 - 음료수 얼려 먹기

깡뇽 2022. 2. 11. 23:36
반응형

Day9

DF/BFS 문제풀기 - 음료수 얼려 먹기(난이도 중하)

 

<문제>

N X M 크기의 얼음 틀에 뚫린 부분은 0, 칸막이가 있는 부분은 1로 표시되며 구멍이 뚫린 부분은 상, 하, 좌, 우로 붙어 있다면 연결되어 있다고 간주한다. 만들어지는 총 아이스크림의 개수 구하자.

 

<조건>

첫째 줄: N과 M

N줄 : 얼음 틀의 형태. 0 또는 1.

음료수 얼려 먹기 풀기

#솔루션

n, m = map(int, input().split())

ice = []
for i in range(n):
  ice.append(list(map(int, input())))

def dfs(x, y):
  # 범위 밖
  if x <= -1 or x >= n or y <= -1 or y >= m:
    return False
  # 현재 노드가 아직 방문하지 않은 곳이면
  if ice[x][y] == 0:
    ice[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):
    # 현재 위치 DFS 수행
    if dfs(i, j) == True:
      result += 1

print(result)

DFS를 이용해서 연결된 노드들을 묶어야 한다.

어떤 지점에서 상, 하, 좌, 우를 살펴보았을 때에 0인 곳으로 가고, 그곳을 1로 바꾼다. 또 그곳에서 상, 하, 좌, 우를 살펴보며 연결된 곳들을 모두 방문한다. 

 

#1

#2

반응형