https://www.acmicpc.net/problem/1743
문제
코레스코 콘도미니엄 8층은 학생들이 3끼의 식사를 해결하는 공간이다. 그러나 몇몇 비양심적인 학생들의 만행으로 음식물이 통로 중간 중간에 떨어져 있다. 이러한 음식물들은 근처에 있는 것끼리 뭉치게 돼서 큰 음식물 쓰레기가 된다.
이 문제를 출제한 선생님은 개인적으로 이러한 음식물을 실내화에 묻히는 것을 정말 진정으로 싫어한다. 참고로 우리가 구해야 할 답은 이 문제를 낸 조교를 맞추는 것이 아니다.
통로에 떨어진 음식물을 피해가기란 쉬운 일이 아니다. 따라서 선생님은 떨어진 음식물 중에 제일 큰 음식물만은 피해 가려고 한다.
선생님을 도와 제일 큰 음식물의 크기를 구해서 “10ra"를 외치지 않게 도와주자.
입력
첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ 10,000)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다.
좌표 (r, c)의 r은 위에서부터, c는 왼쪽에서부터가 기준이다.
출력
첫째 줄에 음식물 중 가장 큰 음식물의 크기를 출력하라.
풀이
bfs를 사용하여 문제를 해결하였다. bfs를 사용하여 상하좌우를 검사하면서 음식물 쓰레기가 있다면 한덩어리로 count하여
제일 큰 음식물의 크기를 알아낸다.
import sys
from collections import deque
input = sys.stdin.readline
n, m, k = map(int, input().split())
graph = [['.' for _ in range(m)] for _ in range(n)]
for _ in range(k):
r, c = map(int, input().split())
graph[r-1][c-1] = '#'
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
count = 0
def bfs(x, y):
queue = deque()
queue.append((x, y))
count = 1
graph[x][y] = 'c'
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= m:
continue
if graph[nx][ny] == '#':
count += 1
graph[nx][ny] = 'c'
queue.append((nx, ny))
return count
for i in range(n):
for j in range(m):
if graph[i][j] == '#':
count = max(count, bfs(i,j))
print(count)
반응형
'Algorithm > Online judge' 카테고리의 다른 글
[백준] 3568번 > iSharp (0) | 2021.06.15 |
---|---|
[백준] 11058번 > 크리보드 (0) | 2021.06.15 |
[백준] 1303번 > 전쟁 - 전투 (0) | 2021.06.13 |
[백준] 1495번 > 기타리스트 (0) | 2021.06.08 |
[백준] 15989번 > 1,2,3 더하기4 (0) | 2021.06.06 |