공부 기록장

[백준 - Python] 2583. 영역 구하기 (DFS/BFS) 본문

코딩 테스트/백준 문제 풀이

[백준 - Python] 2583. 영역 구하기 (DFS/BFS)

빛나무 2024. 1. 14. 16:37

https://www.acmicpc.net/problem/2583

 

2583번: 영역 구하기

첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오

www.acmicpc.net

 

코드

import sys
sys.setrecursionlimit(10**6)

m, n, k = map(int, input().split())
graph = [[0 for _ in range(n)] for _ in range(m)]

for _ in range(k):
    x, y, xx, yy = map(int, input().split())
    for i in range(x, xx):
        for j in range(y, yy):
            graph[j][i] = 1  # 왜 인덱스를 바꾸는 거지 ?? 아

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

#dfs로 풀어보기
def dfs(x, y):
    global cnt
    cnt += 1
    graph[x][y] = 1  # 1은 방문
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if nx < 0 or nx >= m or ny < 0 or ny >= n:
            continue

        if graph[nx][ny] == 0:
            dfs(nx, ny)

result = []
for i in range(m):
    for j in range(n):
        if graph[i][j] == 0:
            cnt = 0
            dfs(i, j)
            result.append(cnt)

print(len(result))
result.sort()
for r in result:
    print(r, end=' ')

 

dfs로 풀었다.

2차원 배열에서 인덱스가 너무 헷갈린다.

인덱스 안 헷갈리는 팁 있으면 알려주세요.