728x90
๐ ๋ฐฑ์ค 1926 - ๊ทธ๋ฆผ
๐ก ๋์ ํ์ด
BFS
๋ฅผ ์ด์ฉํด์ ํ์๋๋ฐ, queue
์ ์๋ ์์๋ฅผ pop
ํ ๋๋ง๋ค cnt+=1
ํด์ฃผ๋๊ฒ์ while
๋ฌธ์ ์ฐ์ง ์๊ณ ์๋ฑํ ๊ณณ์ ์ผ๋ค๊ฐ ๋ต์ด ์ ๋์์ ํค๋งธ๋ค. ๋ ์ค์ํ๊ฒ์ ํจ์๊ฐ ์คํ๋ ๋๋ง๋ค each_cnt
๋ฅผ 1๋ก ์ด๊ธฐํ ํด์ฃผ์. ์๋๋ฉด ๊ฐ์ด ๊ณ์ ๋์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ต๋๊ฐ์ ๊ฐฑ์ ํด์ค ๋ ๊ตณ์ด ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ง ์์๋ return each_cnt
์ ํด์ฃผ๊ณ ๋์ค๋ ๊ฐ๊ณผ 0๋ถํฐ max
๋ก ๋น๊ตํด์ฃผ๋ฉด ๋์ค์ ์ ์ผ ํฐ ๊ฐ๋ง ๋นผ๋ผ ์ ์๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ๋น๊ต๋ฐฉ๋ฒ์ด๋ ์ธ์๋์.
728x90
- ์ธ๋ถ์์ ๋ชจ๋ ์ขํ๋ฅผ ํ๋์ฉ ๋ฃ์ ๋
BFS
๋ฅผ ์ฌ์ฉํ๋ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉดcnt+=1
ํด์ค๋ค. BFS
ํจ์ ๋ด๋ถ์์ ์์๋ฅผpop
ํ ๋each_cnt+=1
์ ํด์ค๋ค.return each_cnt
์ ์ต์ด 0์ผ๋ก ์ ์ํmax_each_count
์ค ํฐ ๊ฐ์ผ๋ก ๊ฐฑ์ ํ๋ฉด์ ๋ฐ๋ณต๋ฌธ์ด ๋๋๋ฉด ๊ฐ์ฅ ๋์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
import sys
from collections import deque
input = sys.stdin.readline
def bfs(x, y):
each_cnt = 1 # init each_cnt
queue = deque()
queue.append((x, y))
visited[x][y] = True
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
if graph[nx][ny] == 1 and not visited[nx][ny]:
visited[nx][ny] = True
queue.append((nx, ny))
each_cnt += 1 # update each_cnt
return each_cnt # end each_cnt
n, m = map(int, input().split())
visited = [[False] * m for _ in range(n)]
graph = [list(map(int, input().split())) for _ in range(n)]
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
cnt, max_each_count = 0, 0
for i in range(n):
for j in range(m):
if graph[i][j] == 1 and not visited[i][j]:
cnt += 1 # dfs work condition
max_each_count = max(max_each_count, bfs(i, j)) # update max_each_count
print(cnt)
print(max_each_count)
๋ฐ์ํ
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 4963 - ์ฌ์ ๊ฐ์(BFS) (0) | 2021.04.20 |
---|---|
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 7576 - ํ ๋งํ (BFS) (0) | 2021.04.20 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2606 - ๋ฐ์ด๋ฌ์ค(DFS) (0) | 2021.04.19 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 11724 - ์ฐ๊ฒฐ ์์์ ๊ฐ์(DFS) (0) | 2021.04.19 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 11724 - ์ฐ๊ฒฐ ์์์ ๊ฐ์(BFS) (0) | 2021.04.19 |
๋๊ธ