Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Spring
- 인천여행
- JPA
- 오일러프로젝트
- Docker
- springboot
- Elasticsearch
- 스프링부트
- 자료구조
- 쿠버네티스
- 카프카
- 스프링
- 백트래킹
- 클라우드 컴퓨팅
- 클라우드
- Kafka
- 월미도
- Apache Kafka
- 코드업
- VPC
- 스프링 부트
- 로드밸런서
- 프로그래밍문제
- Spring Boot
- 백준
- Spring Data JPA
- gcp
- DFS
- 알고리즘
- aws
Archives
- Today
- Total
GW LABS
[Backjoon] 영역 구하기 본문
백준 2583번 영역 구하기 문제는 그래프 탐색 문제의 응용으로, 주어진 좌표로 탐색할 수 없는 영역을 표시하는 부분을 구현하는 것이 핵심인 문제이다. 처음에 접근할 때에는 좌표의 오른쪽 끝점을 포함해서 표시했는데, 이렇게 구현하면 훨씬 큰 영역을 잡게된다. 오른쪽 끝 점에서 1을 빼주고 영역을 표시하고 DFS로 탐색하면 쉽게 풀 수 있는 문제였다. DFS로 구현했을 때 PyPy3 환경에서는 재귀깊이 초과로 런타임 에러가 발생할 수 있다. Python3 환경에서 실행하자.
import sys
sys.setrecursionlimit(10**6)
def dfs(row, col, table):
if table[row][col] == 1:
return 1
table[row][col] = 1
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
result = 0
for idx in range(4):
ny = row + dy[idx]
nx = col + dx[idx]
if 0 <= ny < len(table) and 0 <= nx < len(table[0]) and table[ny][nx] != 1:
result += dfs(ny, nx, table) + 1
return result
if __name__ == "__main__":
row, col, square_count = list(map(int, sys.stdin.readline().split(" ")))
table = [[0 for _ in range(col)] for _ in range(row)]
square_positions = []
for _ in range(square_count):
x1, y1, x2, y2 = list(map(int, sys.stdin.readline().split(" ")))
square_positions.append((x1, y1, x2, y2))
for r in range(row):
for c in range(col):
for position in square_positions:
x1, y1, x2, y2 = position
x2 -= 1
y2 -= 1
if x1 <= c <= x2 and y1 <= r <= y2:
table[r][c] = 1
answers = []
area_count = 0
for r in range(row):
for c in range(col):
if table[r][c] == 0:
area = dfs(r, c, table)
answers.append(area)
area_count += 1
print(area_count)
answers.sort()
for answer in answers:
print(answer + 1, end=" ")
'Algorithm & DataStructure' 카테고리의 다른 글
[Backjoon] 톱니바퀴 (0) | 2020.12.10 |
---|---|
[Backjoon] 저울 (0) | 2020.12.07 |
[Backjoon] 단어 뒤집기 2 (0) | 2020.11.26 |
[Backjoon] 섬의 개수 (0) | 2020.11.18 |
[Backjoon] 쉬운 계단 수 (0) | 2020.11.11 |
Comments