https://www.acmicpc.net/problem/2583
2583번: 영역 구하기
첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오
www.acmicpc.net
- 마지막으로 전체 for문 돌릴 때 graph[i][j] == 0이면 1로 업데이트 해줘야 함
- 이 부분 안 하면 칸이 두 개 이상일 때 첫 칸 재방문하게 됨
- *sorted(result) 하면 result 배열을 오름차순 정렬하고 한 줄에 내용 출력
from collections import deque
m,n,k = map(int, input().split())
result = []
graph = [[0] * n for _ in range(m)]
for _ in range(k):
x1, y1, x2, y2 = map(int, input().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]
queue = deque()
def bfs(x,y):
queue.append((x,y))
cnt = 1
while(queue):
x,y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < m and 0 <= ny < n and graph[nx][ny] == 0:
graph[nx][ny] = 1
cnt += 1
queue.append((nx, ny))
return cnt
for i in range(m):
for j in range(n):
if graph[i][j] == 0:
#여기서 방문 업데이트 안 하면 칸이 두 개 이상일 때
#첫 방문칸 다시 탐색함
graph[i][j] = 1
result.append(bfs(i,j))
print(len(result))
print(*sorted(result))
'◦ Algorithm > Python' 카테고리의 다른 글
프로그래머스 점프와 순간이동 구현? (1) | 2023.04.20 |
---|---|
프로그래머스 입국 심사 이진탐색 (0) | 2023.04.20 |
프로그래머스 가장 긴 팰린드롬 문자열 (1) | 2023.04.15 |
프로그래머스 디스크 컨트롤러 최소힙 (0) | 2023.04.12 |
백준 적록색약 10026 BFS (0) | 2023.04.11 |