https://www.acmicpc.net/problem/1926
1926번: 그림
어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로
www.acmicpc.net
[풀이 과정]
원하는 답은 그림의 개수와, 가장 넓은 넓이를 구하는 것이다.
BFS (너비 우선 탐색)을 쓰면 된다.
import sys
from collections import deque
input = sys.stdin.readline
dx = [1,-1,0,0]
dy = [0,0,1,-1]
def find_draw(Map, q):
global max_draw
temp = 1
while q:
x, y = q.popleft()
for i in range(4): //상하좌우 확인
tx = x + dx[i]
ty = y + dy[i]
if 0<=tx<N and 0<=ty<M and Map[tx][ty] == 1: //인덱스 넘지 않고, 그림이 있으면
temp += 1
Map[tx][ty] = 0
q.append((tx,ty))
max_draw = max(temp,max_draw)
cnt = 0
max_draw = 0
N,M =map(int,input().split())
Map = [list(map(int,input().split())) for _ in range(N)]
for i in range(N):
for j in range(M):
if Map[i][j] == 1:
q = deque([(i,j)])
Map[i][j] = 0
find_draw(Map,q)
cnt += 1
print(cnt)
print(max_draw)
'알고리즘 공부 > 그래프' 카테고리의 다른 글
[백준/그래프] 1976번: 여행가자 (0) | 2022.11.27 |
---|---|
[백준/자료구조] 4195번: 친구 네트워크 (0) | 2022.10.30 |
[백준/DFS] 16724번 피리 부는 사나이 (0) | 2022.04.15 |
[백준/그래프] 16946번 벽 부수고 이동하기 4 (0) | 2022.04.14 |