개발/algorithm

[백준 1743] 음식물 피하기 -python

zzi_on2 2022. 1. 25. 16:19

문제 링크 

https://www.acmicpc.net/problem/1743

 

1743번: 음식물 피하기

첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다.  그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다

www.acmicpc.net

 

풀이 

- bfs 문제 

from collections import deque 

nx = [ 1, -1, 0 , 0 ]
ny = [ 0, 0, 1, -1 ]

def bfs(i,j):
  q = deque()
  q.append((i,j))
  
  # 음식물 크기 저장 
  count = 1 
  maps[i][j] = 0 
  
  while q:
    x, y = q.popleft()

    for i in range(4):
      dx = x + nx[i]
      dy = y + ny[i]
      if 0 <= dx < n and 0<= dy < m and maps[dx][dy] == 1 :
        maps[dx][dy] = 0 
        q.append((dx,dy))
        count +=1 
        
  return count 

n, m , k = map(int,input().split())

maps = [ [0] * m for _ in range(n)]

for _ in range(k):
  a,b = map(int,input().split())
  maps[a-1][b-1] = 1 

# 최대 음식물 크기 저장 
max_num = 0 

for i in range(n):
  for j in range(m):
    if maps[i][j] == 1 :
      tmp = bfs(i,j)
      if tmp > max_num:
        max_num = tmp

print(max_num)