Coding Test/Python
[백준/BFS&DFS] 1926번: 그림 (python, 실버 1)
lim.dev
2024. 3. 11. 22:52
https://www.acmicpc.net/problem/1926
1926번: 그림
어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로
www.acmicpc.net
아이디어
bfs/dfs 문제였다. 방향 벡터와 bfs를 사용하여 풀었다.
전체 코드
from collections import deque
n, m = map(int, input().split())
paint = [[ int(x) for x in input().split()] for _ in range(n)]
visited = [[0]*m for _ in range(n)]
def bfs(x, y, paint, visited):
queue = deque([(x, y)])
visited[x][y] = 1
size = 1
dv = [(0,1), (0,-1), (1,0), (-1,0)]
while queue:
x, y = queue.popleft()
for dx, dy in dv:
nx = x + dx
ny = y + dy
if nx < 0 or nx >= n or ny < 0 or ny >= m or visited[nx][ny] == 1 or paint[nx][ny] == 0:
continue
else:
visited[nx][ny] = 1
size += 1
queue.append((nx, ny))
return size
count = 0
max_size = 0
for x in range(n):
for y in range(m):
if paint[x][y] == 1 and visited[x][y] == 0:
max_size = max(bfs(x,y,paint,visited), max_size)
count += 1
print(count)
print(max_size)