728x90
시간 제한 2초, 메모리 제한 128MB
# 조건
- 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라.
- 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자.
- 가로나 세로로 연결된 것은 연결이 된 것이고 대각선으로 연결이 된 것은 떨어진 그림이다.
- 그림의 넓이란 그림에 포함된 1의 개수이다.
# 접근 방법
- 전형적인 그래프 탐색 문제이다.
- 코테 대비를 하다보면 자주 만나는 영역의 개수 구하기와 동일한 문제이다.
- BFS로 해당 그룹의 개수를 카운트 해주고 max_size를 갱신해 나가면 된다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
from collections import deque
di, dj = [1, -1, 0, 0], [0, 0, 1, -1]
def bfs(si, sj):
global result_size
q = deque()
q.append((si, sj))
temp = 1
while q:
qi, qj = q.popleft()
for d in range(4):
ni, nj = qi + di[d], qj+dj[d]
if 0<=ni<N and 0<=nj<M and visited[ni][nj] == False and arr[ni][nj] == 1:
q.append((ni, nj))
visited[ni][nj] = True
temp += 1
result_size = max(result_size, temp)
N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
result_cnt = 0
result_size = 0
visited = [[False] * M for _ in range(N)]
for i in range(N):
for j in range(M):
if arr[i][j] == 1 and visited[i][j] == False:
visited[i][j] = True
result_cnt += 1
bfs(i, j)
print(result_cnt)
print(result_size)
728x90
'ALGORITHM > DFS, BFS, 그래프 탐색' 카테고리의 다른 글
[백준 15681번] 파이썬 - 트리와 쿼리 (0) | 2024.10.24 |
---|---|
[백준 7562번] 파이썬 - 나이트의 이동 (0) | 2024.08.30 |
[백준 19711번] 파이썬 - 모래성 (0) | 2024.07.18 |
[백준 1743번] 파이썬 - 음식물 피하기 (0) | 2024.05.29 |
[백준 15558번] 파이썬 - 점프 게임 (0) | 2024.05.17 |