알고리즘 공부

[백준 2583번] 영역 구하기 python

gyk7 2024. 7. 23. 22:42

- 문제 유형 : 그래프 탐색

- 간단한 문제라는데 또 헤맸다.

bfs, dfs를 어떤 부분에서 써야할지 감이 안왔다.

dfs를 쓰기 위해 재귀의 깊이를 setrecursionlimt를 써서 정해주었다.

구간의 칸 개수를 세기 위해 위, 아래, 왼쪽, 오른쪽을 체크할 수 있는 dx, dy를 만들었다.

dfs에서 개수를 세서 구간별로 저장시키는 방법을 찾는 게 어려웠다..

 

 

[코드 구현]

import sys
sys.setrecursionlimit(10000)

M, N, K = map(int, input().split())
graph = [[0] *  N for _ in range(M)]

for _ 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

# print(graph)

dx = [0, 0, 1, -1]
dy = [1,-1, 0, 0]

def dfs(x, y, count) :
    graph[y][x] = 1
    for p in range(4) :
        nx = x + dx[p]
        ny = y + dy[p]
        if 0 <= nx < N and 0<= ny < M and graph[ny][nx] == 0 :
            count = dfs(nx, ny, count + 1)
    return count

result = []

for ny in range(M):
    for nx in range(N) :
        if graph[ny][nx] == 0:
            result.append(dfs(nx, ny, 1))

print(len(result))
print(*sorted(result))

 

'알고리즘 공부' 카테고리의 다른 글

[백준 2563번] 색종이 python  (0) 2024.08.01
[programmers] 타겟 넘버  (0) 2024.07.24
[백준 11403번] 경로 찾기 python  (4) 2024.07.23
[백준 7562번] 나이트의 이동 python  (1) 2024.07.22
DFS, BFS 알고리즘 정리  (1) 2024.07.22