์ถ์ฒ: ์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ฝ๋ฉ ํ ์คํธ๋ค with ํ์ด์ฌ(๋๋๋น)
https://www.youtube.com/watch?v=7C9RgOcvkvo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=3
๋ฌธ์
- N * M ํฌ๊ธฐ์ ์ผ์ ํ์ด ์์ต๋๋ค. ๊ตฌ๋ฉ์ด ๋ซ๋ ค ์๋ ๋ถ๋ถ์ 0, ์นธ๋ง์ด๊ฐ ์กด์ฌํ๋ ๋ถ๋ถ์ 1๋ก ํ์๋ฉ๋๋ค. ๊ตฌ๋ฉ์ด ๋ซ๋ ค ์๋ ๋ถ๋ถ๋ผ๋ฆฌ ์,ํ,์ข,์ฐ๋ก ๋ถ์ด ์๋ ๊ฒฝ์ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ์ผ์ ํ์ ๋ชจ์์ด ์ฃผ์ด์ก์ ๋ ์์ฑ๋๋ ์ด ์์ด์คํฌ๋ฆผ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
๋ฌธ์ ์กฐ๊ฑด
- ์ ๋ ฅ ์กฐ๊ฑด:
- ์ฒซ ๋ฒ์งธ ์ค์ ์ผ์ ํ์ ์ธ๋ก ๊ธธ์ด N๊ณผ ๊ฐ๋ก ๊ธธ์ด M์ด ์ฃผ์ด์ง๋๋ค. (1<=N,M<=1000)
- ๋ ๋ฒ์งธ ์ค๋ถํฐ N+1๋ฒ์งธ ์ค๊น์ง ์ผ์ ํ์ ํํ๊ฐ ์ฃผ์ด์ง๋๋ค.
- ์ด์ ๊ตฌ๋ฉ์ด ๋ซ๋ ค ์๋ ๋ถ๋ถ์ 0, ๊ทธ๋ ์ง ์์ ๋ถ๋ถ์ 1์ ๋๋ค.
- ์ถ๋ ฅ ์กฐ๊ฑด: ํ ๋ฒ์ ๋ง๋ค ์ ์๋ ์์ด์คํฌ๋ฆผ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์์ฑ ์ฝ๋
์๋ bfs๋ณด๋ค dfs๋ฅผ ์ ํธํ๋ ํธ์ธ๋ฐ ๊ฐ์๊ธฐ bfs๋ก ํ๊ณ ์ถ์ด์ bfs ๊ตฌํํ๋ ค๋ค๊ฐ ์ข ์ ๋จน์๋ฐ...
ํ์ด์ฌ์ ๊ฑฐ์ ์ด๋ณด์ด๋ค๋ณด๋๊น ์ด์ฐจ์ ๋ฐฐ์ด์ ์ ๋ค๋ฃฐ ์ค ๋ชฐ๋ผ์ ํนํ ํ๋ค์๋ค
from collections import deque
#์,ํ,์ข,์ฐ
dx = [-1,1,0,0]
dy = [0,0,-1,1]
def bfs(x,y,graph,visited):
visited[x][y]=True
q = deque()
q.append((x,y))
while q:
a,b = q.popleft()
for i in range(4):
nx = a + dx[i]
ny = b + dy[i]
if 1<=nx<=n and 1<=ny<=m and not visited[nx][ny]:
visited[nx][ny] = True
if graph[nx][ny]==0:
q.append((nx,ny))
return
n, m = map(int, input().split())
graph = [[0 for j in range(m+1)] for i in range(n+1)]
visited = [[False for j in range(m+1)] for i in range(n+1)]
#graph์ ๊ฐ ์ ์ฅ
for i in range(n):
temp = input()
for j in range(m):
graph[i+1][j+1] = int(temp[j])
#bfs๋๋ฆฌ๊ธฐ
cnt = 0
for i in range(1,n+1):
for j in range(1,m+1):
if not visited[i][j] and graph[i][j]==0:
cnt+=1
bfs(i,j,graph,visited)
print(cnt)
์์ ๋ต์ ๋ณด๋ ค๊ณ ํ๋๋ฐ ์์์์๋ dfs๋ก ๊ตฌํ๋์ด์๊ธธ๋
๊ฐ์๊ธฐ dfs๋ก๋ ํผ์ ๋จผ์ ๊ตฌํํด๋ณด๊ณ ์ถ์ด์ ๊ฐ์ ๋ฉ์ถฐ๋๊ณ dfs๋ก ๋ค์ ํ์ด๋ดค๋ค
def dfs(x,y,graph,visited):
visited[x][y] = True
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 1<=nx<=n and 1<=ny<=m and not visited[nx][ny]:
visited[nx][ny]=True
if graph[nx][ny] == 0:
dfs(nx,ny,graph,visited)
return
๊ฐ์ ์์ ์ฝ๋
์ผ๋จ ๋ณด์๋ง์ ๋๋ณด๋ค ์ฝ๋๊ฐ ์์ฒญ ๊ฐ๊ฒฐํ ๊ฒ ๋๊ปด์ก๋ค
์ฐ์ ๊ทธ๋ํ ์ด๊ธฐํํ๋ ๋ถ๋ถ
# n * m ๋ฐฐ์ด ์์ ์
๋ ฅ๋ฐ๊ธฐ
n,m = map(int, input().split())
graph=[]
for i in range(n):
graph.append(list(map(int,input())))
-๋๋ 0์ผ๋ก ์ด๊ธฐํ๋ (n+1)*(m+1) ํฌ๊ธฐ์ ์ด์ฐจ์ ๋ฐฐ์ด์ ๋จผ์ ๋ง๋ค์ด๋๊ณ ๊ฐ์ ์ ๋ ฅ๋ฐ์ผ๋ฉฐ ํ๋ํ๋ updateํด์ฃผ์๋๋ฐ,
-์์ ์ฝ๋์์๋ graph ๋ฆฌ์คํธ๋ฅผ ์ ์ธ๋ง ํด๋๊ณ ๋ฐ๋ก ์ ๋ ฅ๋ฐ์์
๋ฐฉ๋ฌธ ์ฌ๋ถ ์ฒดํฌ
-๋๋ ์ฃผ์ด์ง ๋ฐฐ์ด๊ณผ ๊ฐ์ ํฌ๊ธฐ์ ์๋ก์ด ์ด์ฐจ์๋ฐฐ์ด์ ๋ง๋ค์ด ๊ฑฐ๊ธฐ์ ๋ฐฉ๋ฌธ์ฌ๋ถ๋ฅผ ์ฒดํฌํด๊ฐ๋ฉด์ ์ํํ์
-์์ ์ฝ๋์์๋ ์๋ก์ด ๋ฐฐ์ด์ ์ ์ธํ์ง ์๊ณ , ๋ฐฉ๋ฌธ๊ฐ๋ฅํ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธ์ ๊ฐ์ 1๋ก ๋ฐ๊พธ์ด์ค์ผ๋ก์จ ๋ฐฉ๋ฌธ๋ ธ๋๋ฅผ ์ฒดํฌํ์๊ณ , ๋ฆฌํด๊ฐ์ด True๊ฐ ๋์ด ์ต์ด๋ก ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๊ฐ ๋ ๊ฒฝ์ฐ์๋ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์์ผ์ฃผ์๋ค.
๋ด๊ฐ ์์ฑํ ์ฝ๋์์๋ ๋ฐฉ๋ฌธ ์ฌ๋ถ ์ฒดํฌ ๋ฐฐ์ด์ ๋ฐ๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ์ ์์ ๋ต์๊ณผ ๋น๊ตํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํจ์ฌ ๋ง์ด ํ์ํ ๊ฒ์ด๋ค
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DFS,BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]4963๋ฒ: ์ฌ์ ๊ฐ์ (0) | 2023.02.23 |
---|---|
[์ด์ฝํ ]๋ฏธ๋ก ํ์ถ / [๋ฐฑ์ค]2178๋ฒ: ๋ฏธ๋ก ํ์ (0) | 2023.02.23 |
dfs, bfs ํ์ด์ฌ ๊ตฌํ (0) | 2023.02.23 |
[๋ฐฑ์ค]2644๋ฒ: ์ด์๊ณ์ฐ (1) | 2023.02.18 |
[๋ฐฑ์ค]2667๋ฒ: ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2023.02.15 |