출처 : https://www.acmicpc.net/problem/2468
2468번: 안전 영역
재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는
www.acmicpc.net
1) 요구사항 분석 : 문제 읽기
안전한 영역의 최대 개수
2) 설계 : 접근 방식
높이보다 낮거나 같으면 침수표시해주고(false), 배열 순회 완료했으면 dfs 이용 갯수 세어준다.
처음에 비가 안 오는 경우를 고려하지 않고 높이가 1부터 시작해서 틀렸다..!
import sys
sys.setrecursionlimit(10**6)
이거로 재귀 범위 늘려줌
# BOJ2468 안전 영역
import sys
sys.setrecursionlimit(10**6)
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
visited = [[True for _ in range(n)] for _ in range(n)]
# 델타탐색
di = [1, 0, -1, 0]
dj = [0, 1, 0, -1]
def in_range(x, y): # 인덱스 범위 안에 있는지
return 0 <= x < n and 0 <= y < n
def dfs(i, j):
global visited
for x in range(4):
ni = i + di[x]
nj = j + dj[x]
if in_range(ni, nj) and visited[ni][nj]:
visited[ni][nj] = False
dfs(ni, nj)
max_area = 0 # 안전 영역의 최대 개수
for h in range(101):
for i in range(n):
for j in range(n):
if arr[i][j] <= h:
visited[i][j] = False
cnt = 0
for i in range(n):
for j in range(n):
if visited[i][j]:
cnt += 1
visited[i][j] = False
dfs(i, j)
if cnt == 0: # 모든 영역이 물에 잠김
break
max_area = max(max_area, cnt)
visited = [[True for _ in range(n)] for _ in range(n)]
print(max_area)
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ / 백준] 27737 버섯 농장 python / 파이썬 dfs (0) | 2023.09.14 |
---|---|
[BOJ / 백준] 1991 트리 순회 python / 파이썬 트리 (0) | 2023.09.10 |
[BOJ / 백준] 1715 카드 정렬하기 python / 파이썬 우선순위 큐 / 힙 (0) | 2023.08.19 |
[BOJ / 백준] 11286 절댓값 힙 python / 파이썬 우선순위 큐 / 힙 (0) | 2023.08.18 |
[BOJ / 백준] 1927 최소 힙 python / 파이썬 우선순위 큐 / 힙 (0) | 2023.07.25 |
댓글