<내 코드>
import sys
sys.setrecursionlimit(10000)
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
def dfs(x, y, h):
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if(0 <= nx < N) and (0 <= ny < N):
if arr[nx][ny] > h and done[nx][ny] == 0:
done[nx][ny] = 1
dfs(nx, ny, h)
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
ans = 0
for k in range(max(map(max, arr))): # 주어진 배열에서 가장 큰값만큼 반복
# 매번 초기화
cnt = 0
done = [[0]*N for _ in range(N)]
# 입력 받은 arr배열 탐색
for i in range(N):
for j in range(N):
if arr[i][j] > k and done[i][j] == 0:
done[i][j] = 1
cnt += 1
dfs(i, j, k)
ans = max(ans, cnt)
print(ans)
5
6 8 2 6 2
3 2 3 4 6
6 7 3 3 2
7 2 5 3 6
8 9 5 2 7
이 문제에서 중요한 것이 물의 높이 1부터 ~ 가장 높은 높이까지 반복하며, 안전 영역의 최댓값을 구하는 거다.
max(map(max, arr)) 구문을 통해서 입력 배열에서 가장 큰 값(이 예에서는 9)을 구할 수 있다. 그리고 매 dfs 탐색이 끝나면 이전 안전 영역 개수(ans)와 현재 탐색의 안전 영역 개수(cnt) 중 큰 값을 비교해 담는다.
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 2437] 저울 - Python (그리디) (0) | 2020.09.05 |
---|---|
[백준 7562] 나이트의 이동 - Python (BFS) (0) | 2020.09.04 |
[백준 10026] 적록색약 - Python (DFS, BFS) (0) | 2020.09.03 |
[백준 1987] 알파벳 - Python (DFS, 백트래킹) (0) | 2020.09.03 |
[백준 8958] OX 퀴즈 - Python (문자열) (0) | 2020.09.02 |