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
Solution
from collections import deque
import sys
input = sys.stdin.readline
n,m,k = map(int, input().split())
graph = [[0]*m for _ in range(n)]
for _ in range(k):
r,c = map(int, input().split())
graph[r-1][c-1] = 1
dx = [0,0,-1,1]
dy = [-1,1,0,0]
def bfs(i,j):
q = deque()
q.append((i,j))
graph[i][j] = 2
sum = 1
while q:
x,y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<m and graph[nx][ny] == 1:
q.append([nx,ny])
graph[nx][ny] = 2 # 방문 처리
sum+=1
return sum
max = -1
for i in range(n):
for j in range(m):
if graph[i][j] == 1:
size = bfs(i,j)
if max <= size:
max = size
print(max)
BFS를 활용하여 문제를 해결하였다.
사방면으로 점차 쓰레기의 영역을 찾아나가는 방식의 BFS 코드 구현
'Programming > DFSBFS' 카테고리의 다른 글
Programmers / 단어 변환 (0) | 2022.04.29 |
---|---|
Programmers / 단어 변환 (0) | 2022.04.29 |
Baekjoon / BFS / 연결 요소의 개수 (0) | 2022.02.13 |
Baekjoon / DFS / 유기농 배추 (0) | 2022.02.13 |
Baekjoon / BFS / 미로탐색 (0) | 2022.02.11 |