import sys
sys.setrecursionlimit(2500) # 재귀 깊이 설정
n, m = map(int, input().split())
highest = 0
mat = []
ans = [1, 0]
visited = []
for _ in range(n):
buf = [int(x) for x in input().split()]
highest = max(highest, max(buf))
mat.append(buf)
def search(row, col, k):
global visited
if (
row < 0
or col < 0
or row > n - 1
or col > m - 1
or visited[row][col] == True
or mat[row][col] <= k
):
return
visited[row][col] = True
search(row - 1, col, k)
search(row + 1, col, k)
search(row, col + 1, k)
search(row, col - 1, k)
# K를 늘려가며 안전지대를 탐색한다.
def DFS():
global highest, ans, visited
for k in range(1, highest):
visited = [[False for _ in range(m)] for _ in range(n)]
comfort_zone = 0
for row in range(n):
for col in range(m):
# 이미 방문했거나 물에 잠긴 좌표는 넘어간다.
if visited[row][col] == True or mat[row][col] <= k:
continue
comfort_zone += 1
search(row, col, k)
if comfort_zone > ans[1]:
ans = [k, comfort_zone]
DFS()
for item in ans:
print(item, end=" ")
DFS 챕터를 진행했습니다. 챕터 볼륨이 적고 난이도가 적어 아주 중요하게 다뤄지는 내용은 아닌걸로 보입니다. (BFS와 비교해서..)
DFS에서 반복되었던 패턴은 방문 체크를 위한 문제와 같은 크기의 배열의 존재 + dx, dy 좌표 이동이었습니다.
평이한 챕터였기에 재귀 깊이 설정을 처음 해봤던 문제를 기록한다. 흠.. 앞으로 재귀 문제는 따로 깊이 설정을 해야하나 싶다.
'Algorithm' 카테고리의 다른 글
[코드트리 조별과제] BFS - 돌 잘 치우기 (0) | 2024.08.25 |
---|---|
[코드트리 조별과제] Backtracking - 사다리 타기 (0) | 2024.08.11 |