[백준] 2583번, 영역 구하기 (Python)

2021. 7. 16. 17:45·알고리즘/백준
728x90
반응형

문제

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

 

2583번: 영역 구하기

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

www.acmicpc.net

 

코드

import collections

m, n, k = map(int, input().split()) # m 세로, n 가로
graph = [[0]*n for _ in range(m)]
check = [[False]*n for _ in range(m)]
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
count = 0
result = []

def bfs(x,y):
    total = 0
    queue = collections.deque()
    queue.append((x,y))
    while queue:
        total += 1
        check[x][y] = True
        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:
                if graph[nx][ny] == 0 and check[nx][ny] == False:
                    check[nx][ny] = True
                    queue.append((nx,ny))
    return total

for i in range(k):
    x1,y1,x2,y2 = map(int, input().split())
    for x in range(y1, y2):
        for y in range(x1, x2):
            graph[x][y] = 1

for x in range(m):
    for y in range(n):
        if graph[x][y] == 0 and check[x][y] == False:
            result.append(bfs(x,y))
            count+=1
            
result.sort()
print(count)
for i in result:
    print(i, end=' ')

for문을 돌아 x1,y1, x2,y2에 범위를 입력받으면 graph에 범위안을 1로 채워준다.

그리고 1인 직사각형을 제외한 부분을 알고싶기 때문에 graph에서 0인 부분을 찾게 bfs를 돈다.

 

영역에 개수를 구하기 위해서 bfs함수를 시작할때마다 count를 더해주고

영역마다 안에 개수는 bfs에서 total로 while문이 반복될때마다 total에 더해주면 된다.

반응형
저작자표시 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 15900번, 나무 탈출 (Python)  (0) 2021.07.21
[백준] 10026번, 적록색약 (Python)  (0) 2021.07.16
[백준] 4963번, 섬의 개수 (Python)  (0) 2021.07.15
[백준] 11057번, 오르막 수 (Python)  (0) 2021.07.14
[백준] 7562번, 나이트의 이동 (Python)  (0) 2021.07.09
'알고리즘/백준' 카테고리의 다른 글
  • [백준] 15900번, 나무 탈출 (Python)
  • [백준] 10026번, 적록색약 (Python)
  • [백준] 4963번, 섬의 개수 (Python)
  • [백준] 11057번, 오르막 수 (Python)
wookcode
wookcode
공부한 내용들을 정리하고 기록하는 블로그입니다.
    반응형
  • wookcode
    wookcode
    wookcode
  • 전체
    오늘
    어제
    • 카테고리 (196) N
      • study (0)
        • 아파치 카프카 애플리케이션 프로그래밍 with 자.. (0)
      • Live Study (15)
      • Programming (14)
        • Java (8)
        • Python (1)
        • Springboot (5)
        • MSA (0)
      • 알고리즘 (117)
        • 백준 (58)
        • 프로그래머스 (59)
      • 에러로그 (5)
      • 항해99 (23)
      • 면접 (1)
      • 프로젝트 (1)
      • CS (20) N
        • 네트워크 (2)
        • 운영체제 (2)
        • 데이터베이스 (2)
        • 컴퓨터구조 (1)
        • Java (8)
        • Spring (5) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그리디
    에러
    김영한
    카카오인턴
    코딩테스트
    실전프로젝트
    알고리즘
    orm
    스파르타코딩클럽
    항해99
    인프런
    후기
    spring
    카카오코딩테스트
    미니프로젝트
    백준
    파이썬
    버그
    java
    브루트포스
    조합
    괄호
    SFlash
    정리
    jpa
    프로그래머스
    회고
    항해마켓
    해결
    SpringBoot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
wookcode
[백준] 2583번, 영역 구하기 (Python)
상단으로

티스토리툴바