2583. 영역 구하기
2583번: 영역 구하기
첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오
www.acmicpc.net
- 영역을 미리 다 체크해두고 아닌 부분만 계산
from collections import deque
m, n, k = map(int, input().split())
graph = [[0 for _ in range(n)] for _ in range(m)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(k):
x1, y1, x2, y2 = map(int, input().split())
for i in range(x1, x2):
for j in range(y1, y2):
graph[j][i] = 1
result = []
def bfs(i, j):
queue = deque()
tmp = 1
queue.append((i, j))
graph[i][j] = 1
while queue:
x, y = queue.popleft()
for k in range(4):
nx = x+dx[k]
ny = y+dy[k]
if nx < 0 or nx >= m or ny < 0 or ny >= n:
continue
if graph[nx][ny] == 1:
continue
graph[nx][ny] = 1
tmp += 1
queue.append((nx, ny))
result.append(tmp)
for i in range(m):
for j in range(n):
if graph[i][j] == 1:
continue
bfs(i, j)
print(len(result))
print(*sorted(result))'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준][DFS][백트래킹] 2310. 어드벤처 게임 (0) | 2023.09.09 |
|---|---|
| [백준][조합][BFS] 1941. 소문난 칠공주 (0) | 2023.09.09 |
| [백준][누적합] 16507. 어두운 건 무서워 (0) | 2023.08.30 |
| [백준][그리디] 14247. 나무 자르기 (1) | 2023.08.30 |
| [백준][그리디][비트마스킹] 1052.물병 (0) | 2023.08.25 |