본문 바로가기
Algorithm

[탐색/BFS] 백준 2583 영역 구하기 - 파이썬(Python)

by jangThang 2022. 7. 11.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    2583번: 영역 구하기

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

    www.acmicpc.net

     

     

    2. 문제 풀이

     사각형으로 분리된 영역의 개수의 크기를 구하는 문제입니다.

     

    2022.07.01 - [Algorithm] - [구현/수학] 백준 2669 직사각형 네개의 합집합의 면적 구하기 - 파이썬(Python)

     위 문제에서 사용했던 방법과 비슷합니다. 미리 모눈종이를 만들어두고, 사각형의 영역만 False로 바꿉니다. 그러면, 사각형이 겹쳐지더라도 문제가 되지 않습니다.

     이후 BFS 탐색을 이용해서 영역의 개수와 크기를 찾아냅니다.

     

     

     

    3. 코드

    from collections import deque
    import sys
    input = sys.stdin.readline
    
    # 입력
    N, M, K = map(int, input().split())
    board = [[True]*M for _ in range(N)]
    for _ in range(K):
        x1, y1, x2, y2 = map(int, input().split())
        for i in range(y1, y2):
            for j in range(x1, x2):
                board[i][j] = False
    
    # BFS 탐색
    area = []  # 영역
    direction = [(1,0), (-1,0), (0,1), (0,-1)]
    
    for i in range(N):
        for j in range(M):
            # 탐색하지 않은 영역이면 BFS 탐색
            if board[i][j]:
                queue = deque([(i, j)])
                board[i][j] = False
                size = 0
                while queue:
                    x, y = queue.popleft()
                    size += 1
                    for dx, dy in direction:
                        nx, ny = x+dx, y+dy
                        if 0 <= nx < N and 0 <= ny < M and board[nx][ny]:
                            board[nx][ny] = False
                            queue.append((nx, ny))
                area.append(size)
    
    # 정렬 후 출력
    area.sort()
    print(len(area))
    print(" ".join(map(str, area)))

     

    2022.02.23 - [Algorithm] - [Algorithm] 너비 우선 탐색(BFS), 가까운 주변부터 찾자

     

    [Algorithm] 너비 우선 탐색(BFS), 가까운 주변부터 찾자

     BFS는 가까운 주변부터 탐색하는 알고리즘입니다. 큐를 이용한 BFS 구현방법과 코드를 알아보겠습니다. [ Contents ] 1. BFS(Breath First Search) 너비 우선 탐색(BFS): 가까운 주변 노드부터 탐색하며 점점.

    star7sss.tistory.com

     BFS 탐색에 대한 설명과 코드는 위 링크에서 보실 수 있습니다.

     

    star가 되고나서 Tistory

    반응형

    댓글