이호진
이코테 - 음료수 얼려먹기2 - DFS - 2021/03/11 본문
이코테 - 음료수 얼려먹기 - DFS - 2021/03/10
DFS란 깊이 우선 탐색을 말한다. 스택에 넣어 방문처리하고 그래프에서 시작노드를 for문을 이용하여 순서대로 돌린다. -> 재귀함수 이용 음료수 얼려먹기 문제는 001 010 101 이처럼 주어질 때 1을
leehojin0719.tistory.com
여기서 풀었던 음료수 얼려먹기 문제는 상하좌우 검사할 때,
dfs(x-1,y)
dfs(x,y-1)
dfs(x+1,y)
dfs(x,y+1)
로 풀었던 문제를 dx와 dy로 풀어봤다.
n, m = map(int, input().split())
graph = []
for i in range(n):
graph.append(list(map(int, input())))
def dfs(x, y):
graph[x][y] = 1
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx <= -1 or nx >= n or ny <= -1 or ny >= m:
continue
if graph[nx][ny] == 1:
continue
if graph[nx][ny] == 0:
dfs(nx, ny)
count = 0
for i in range(n):
for j in range(m):
if graph[i][j] == 0:
count += 1
dfs(i, j)
print(count)
main문부터
1. 전 좌표를 다 검사한다.
2. 만약 좌표 값이 0이면 카운트하고 dfs함수를 이용한다. (->dfs함수안에서 인접한 0들은 다 1로 바뀐다.)
dfs함수에서
1. 0이었던 입력된 좌표의 값을 1로 바꾼다 (->재귀함수 이용시 인접한 0들을 1로 바꾸기 위해)
2. dx와 dy를 정의하고
3. 네 방면으로 모두 새로운 nx와 ny를 만들어준다.
4. 첫 번째 if문에서 좌표를 벗어나면 continue한다.
5. 두 번째 if문에서 벽을 만나면 continue한다.
6 세 번째 if문에서 0이면 재귀함수를 이용한다.
'문제풀이' 카테고리의 다른 글
프로그래머스 - 모의고사 - 2021/03/19 (0) | 2021.03.21 |
---|---|
프로그래머스 - 소수 찾기 - 2021/03/19 (0) | 2021.03.21 |
이코테 - 음료수 얼려먹기 - DFS - 2021/03/10 (0) | 2021.03.10 |
이코테 - 미로탈출 - BFS - 2021/03/10 (0) | 2021.03.10 |
그리디 - 볼링공 고르기 - 2021/03/08 (0) | 2021.03.08 |