728x90
๐ ๋ฐฑ์ค 1743 - ์์๋ฌผ ํผํ๊ธฐ
๐ก ๋์ ํ์ด
์ ํ์ ์ธ BFS
ํน์ DFS
๋ฌธ์ ์ด๊ณ , ์
๋ ฅ์ ์์๋ฌผ์ ์ขํ๋ฅผ ์
๋ ฅ๋ฐ์ BFS
, DFS
๋ฅผ ๋๋ ค ๋จ์ ๊ฐ์๋ฅผ ํ์
ํ๊ณ ๊ธฐ์กด ๊ฐ์์ ํ์ฌ ๊ฐ์๋ฅผ ๋น๊ตํ์ฌ ๋ ํฐ ๊ฐ์ผ๋ก ๊ฐฑ์ ํด์ฃผ๋ฉด ๋๋ ๋ฐฉํฅ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ๋ฉด ๋๋ค.
728x90
์ฌ๊ธฐ์ ์ฝ๊ฐ ๊น๋ค๋ก์ด ๋ถ๋ถ์ ์ขํ๋ฅผ ์ง์ ์
๋ ฅ๋ฐ๋ ๋ถ๋ถ์ผ ํ
๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ graph
๋ 0
๋ถํฐ ์์ํ๋ฏ๋ก ์
๋ ฅ์ ๋ฐ์ ๋ -1
์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด ์ค๋ฅ์์ด ๊ทธ๋ํ์ ์
๋ ฅํ ์ ์๋ค. ํ์ด ํ๋ฆ์ ์ง์ ๊ทธ๋ ค๋ดค๋ค.
import sys
from collections import deque
input = sys.stdin.readline
def bfs(x, y):
cnt = 0
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))
cnt += 1 # count food
return cnt + 1
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
n, m, k = map(int, input().split())
graph = [[0] * m for _ in range(n)]
visited = [[False] * m for _ in range(n)]
for i in range(k): # plot food
r, c = map(int, input().split())
graph[r-1][c-1] = 1
max_food = 0
for i in range(n):
for j in range(m):
if graph[i][j] == 1 and not visited[i][j]:
max_food = max(max_food, bfs(i, j)) # update max count food
print(max_food)
๋ฐ์ํ
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 11659 - ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ4 (5) | 2021.04.23 |
---|---|
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 4179 - ๋ถ! (BFS) (9) | 2021.04.22 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 1303 - ์ ์ - ์ ํฌ(BFS) (3) | 2021.04.21 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 4963 - ์ฌ์ ๊ฐ์(DFS) (0) | 2021.04.20 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 4963 - ์ฌ์ ๊ฐ์(BFS) (0) | 2021.04.20 |
๋๊ธ