https://www.acmicpc.net/problem/2583
2583번: 영역 구하기
첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오
www.acmicpc.net
import sys
from collections import deque
m, n, k = map(int,sys.stdin.readline().split())
graph = [[0]*n for i in range(m)]
for _ in range(k):
x1,y1,x2,y2 = map(int,sys.stdin.readline().split())
for i in range(y1,y2):
for j in range(x1,x2):
graph[i][j] = 1
dx = [0,0,1,-1]
dy = [1,-1,0,0]
def bfs(x,y,k):
q = deque()
q.append((x,y))
count = 0
while q:
x,y =q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < m and 0 <= ny < n:
if graph[nx][ny] == 0 :
graph[nx][ny] = 1
count += 1
q.append((nx, ny))
k += 1
if count == 0 :
count = 1
return count, k
part =0
rec_cnt = 0
part_list = []
for i in range(len(graph)):
for j in range(len(graph[i])):
if graph[i][j] == 0:
rec_cnt, part=bfs(i,j,part)
part_list.append(rec_cnt)
print(part)
part_list.sort()
for i in range(len(part_list)):
print(part_list[i], end = " ")
어렵지는 않은 문제이다.
알고리즘을 잘 이해하고 있다면 쉽게 풀 수 있다. 하지만
문제에 주어진 입력을 잘 받는 방법만 조금 생각하면된다.
반응형
'알고리즘 공부 > BFS & DFS' 카테고리의 다른 글
[백준] 24480번 알고리즘 수업 - 깊이 우선 탐색 2 - python (0) | 2022.06.09 |
---|---|
[백준] 24479번 알고리즘 수업 - 깊이 우선 탐색 1- python (0) | 2022.06.09 |
[백준] 11724번 연결 요소의 개수 - 파이썬 (0) | 2022.05.06 |
[백준] 23288번 주사위 굴리기 2 - 파이썬 (0) | 2022.04.18 |
[백준] 16236번 아기 상어- 파이썬 (0) | 2022.04.07 |