Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 삼성소프트웨어
- MSSQL
- 단지번호붙이기
- setviewname
- WebMvcConfigurer
- 음료수얼려먹기
- 파이썬컨벤션
- heapq
- 2667
- major gc
- 화살표함수
- minmax
- dfs
- 우선순위큐
- addAttribute
- 파이썬스럽게
- JWT
- Spring
- 미로탐색
- 미로탈출
- pep8
- 2178
- BFS
- 2606
- SWEA
- 이코테
- React
- Arecode
- 백준
- __name__
Archives
- Today
- Total
하루하루는 성실하게 인생 전체는 되는대로
DFS - 음료수 얼려 먹기 본문
N, M = map(int, input().split())
graph = []
for i in range (N):
graph.append(list(map(int, input())))
# 모든 노드(위치)에 음료수 넣기 => 즉, 음료담을 공간인 0에 음료 얼리기 위해 넣기
result = 0
for n in range(N):
for m in range(M):
# 현재 위치에서 DFS 돌려서 true가 나오면 값 +1
if dfs(n,m) == True:
result += 1
print(result)
def dfs(x, y):
#주어진 범위 벗어나면 즉시 종료(False 반환)
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
- 연결 구조(Connection ~)하면, dfs/bfs 떠올리기!
- 풀이 아이디어 : 얼음을 채워넣는데, 한번에 주위 것까지 같이 넣어진다
⇒ 한 노드를 중심으로 방문을 확인하면서 방문표시를 즉각적으로 해주고, 이것이 재귀적으로 한번에 실행되게 한다. 한 덩어리 실행이 완료되면 +1을 해줌으로써 덩어리 개수 카운트.
⇒ 더 자세한 설명 : 한 중심 노드의 방문여부 확인해서 방문 안했으면 방문처리하고, 이걸 함수로 만들어서 재귀적으로 돌려서 그 근처 노드에 대해서도 방문 여부를 한번에 체크하고 방문처리할 수 있게 한다. 방문이 완료된 지점에서는 함수동작 멈추도록(return False 등을 이용) 구상. - 헷갈렸던 점 : dfs함수를 호출하여 dfs(x, y)를 돌릴 때, 그 안에서 재귀적으로 돌아가는 dfs(x-1, y) 등등으로 인해 그때마다 True가 입력되어 result가 매번 +1 되는 것은 아닐까??
⇒ 해결! : 내부의 함수는 끝난다음에 return을 해줄 수 없다. 결국 첫번째로 dfs에 입력한 dfs(x,y)가 완전히 종료되는 시점에서만 return이 가능하지 그 중간에는 함수밖을 벗어날 수 없다! - 주의할 점 : 주어진 범위를 벗어나는 영역에 대해서는 (-1, N이상) return False 되게!
- 이게 dfs인 이유? : 아래 사진 참고.
이런 연유로 재귀함수는 거의 dfs⇒ 너무 뇌피셜..
'알고리즘 Archive' 카테고리의 다른 글
[백준] 1260 - dfs와 bfs (미완-다시풀기) (0) | 2021.03.24 |
---|---|
BFS - 미로 탈출 (0) | 2021.03.24 |
[백준] 2750 - 수 정렬 (0) | 2021.03.24 |
[백준] 1920 - 수 찾기 (0) | 2021.03.24 |
[swea] list - min max (파이썬) (0) | 2021.03.24 |
Comments