728x90
반응형
음료수 얼려 먹기
난이도 : 中下 풀이 시간 : 30분
시간 제한 : 1초 메모리 제한 : 128 MB
해답
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 y <= -1 or x >= n or y >= m):
return False
else:
if graph[x][y] == 0:
graph[x][y] = 1
dfs(x-1, y)
dfs(x+1, y)
dfs(x, y-1)
dfs(x, y+1)
return True
return False
result = 0
for i in range(n):
for j in range(m):
if dfs(i, j) == True:
result = result + 1
print(result)
예시
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 y <= -1 or x >= n or y >= m):
return False
if graph[x][y] == 0:
graph[x][y] = 1
dfs(x-1, y)
dfs(x+1, y)
dfs(x, y-1)
dfs(x, y+1)
return True
return False
result = 0
for i in range(n):
for j in range(m):
if dfs(i, j) == True:
result = result + 1
print(result)
해설
먼저 n과 m, graph로 입력을 받습니다. 이 문제는 DFS 알고리즘을 사용합니다.
dfs 함수를 정의하고, dfs 알고리즘을 사용할 것이므로 재귀 함수를 사용합니다.
시작 위치를 1로 바꾸고, 상하좌우에 모두 dfs 함수를 재귀 형식으로 적용하여 붙어있는 칸을 전부 1로 바꿉니다.
전부 1로 바꾼 뒤에, 재귀문에서 빠져 나오면 True를 반환해줍니다.
여기서 True로 반환된 값은 아래 이중 for 반복문에서 result의 값을 증가시켜줍니다.
위와 같은 과정을 for 이중 반복문으로 탐색하고, True 값이 반환되는 횟수 만큼 result 값을 증가시켜주면 됩니다.
728x90
반응형
'알고리즘 (Python) > 이것이 코딩 테스트다 with 파이썬' 카테고리의 다른 글
[이진 탐색 알고리즘] 부품 찾기 - 파이썬(python) (0) | 2020.12.15 |
---|---|
[정렬 알고리즘] 두 배열의 원소 교체 - 파이썬(python) (0) | 2020.12.14 |
[정렬 알고리즘] 성적이 낮은 순서로 학생 출력하기 - 파이썬(python) (0) | 2020.12.14 |
[정렬 알고리즘] 위에서 아래로 - 파이썬(python) (0) | 2020.12.14 |
[BFS 알고리즘] 미로 탈출 - 파이썬(python) (0) | 2020.12.14 |