[백준 2583] 영역 구하기

Junyoung Park·2022년 3월 6일
0

코딩테스트

목록 보기
210/631
post-thumbnail

1. 문제 설명

영역 구하기

2. 문제 분석

모든 범위에서 탐색 알고리즘을 실행해 노드 개수를 카운트, 기록한다.

3. 나의 풀이

import sys
from collections import deque

row, col, k = map(int, sys.stdin.readline().rstrip().split())
boxes = []

for _ in range(k):
    boxes.append(list(map(int, sys.stdin.readline().rstrip().split())))

visited = [[False for _ in range(col)] for _ in range(row)]

for box in boxes:
    x1, y1, x2, y2 = box
    for x in range(x1, x2):
        for y in range(y1, y2):
            visited[y][x] = True
# 갈 수 없는 부분을 True로 마킹

queue = deque()
box_size = []
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
for i in range(row):
    for j in range(col):
        # 모든 탐색 가능한 시작 노드를 찾는다.
        if not visited[i][j]:
            # 공간이 있다면
            queue.append([i, j])
            visited[i][j] = True
            size = 0
            while queue:
                cur_row, cur_col = queue.popleft()
                size += 1
                for x, y in zip(dx, dy):
                    next_row, next_col = cur_row + x, cur_col + y

                    if next_row < 0 or next_col < 0 or next_row >= row or next_col >= col: continue
                    if not visited[next_row][next_col]:
                        queue.append([next_row, next_col])
                        visited[next_row][next_col] = True
                        # 탐색 부분을 마킹하고 큐에 넣는다. 즉 [i, j]에서 탐색했을 때 이 부분은 갈 수 있다.
            box_size.append(size)

print(len(box_size))
box_size.sort()
print(*box_size, sep=' ')
profile
JUST DO IT

0개의 댓글