반응형
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
- codecademy
- 검색트리
- 프로그래머스
- algorithm
- inflearn
- CleanCode
- DP
- front-end
- 클린코드
- BFS
- 순환
- android
- Spring
- 구현
- 정렬
- SWEA
- CSS
- 코딩테스트
- html
- java
- Web
- javascript
- 자바
- 다이나믹 프로그래밍
- 알고리즘
- Kotlin
- 해슁
- DFS
- Color
- SQL
Archives
- Today
- Total
깡뇽
[코테] DFS/BFS 문제풀기 - 음료수 얼려 먹기 본문
반응형
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
반응형
'Algorithm > Coding Test' 카테고리의 다른 글
[코테] 파이썬 입출력 총정리 (0) | 2022.08.09 |
---|---|
[코테] DFS/BFS 문제풀기 - 미로 탈출 (2) | 2022.02.13 |
[코테] DFS/BFS 공부하기 (0) | 2022.02.10 |
[코테] 구현 문제풀기 - 게임 개발 (0) | 2022.02.04 |
[코테] 구현 문제풀기 - 왕실의 나이트 (0) | 2022.02.03 |