๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€(BOJ)

[ ํŒŒ์ด์ฌ(python) ] ๋ฐฑ์ค€ 1743 - ์Œ์‹๋ฌผํ”ผํ•˜๊ธฐ (BFS)

by YWTechIT 2021. 4. 22.
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)
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€