백준2468(파이썬) - 안전영역
resilient
·2021. 5. 23. 23:37
728x90
반응형
https://www.acmicpc.net/problem/2468
- 이 문제는 일단 DFS 형식을 똑같이 사용하지만, graph[x][y]가 0또는 1로 dfs재귀를 돌지 말지 정하는 것이 아니라 주어지는 높이에 따라서 높이인덱스에 맞게 각각 영역의 카운트가 들어가야한다.
- 그래서 주어지는 높이를 dfs함수를 실행할 때 넣어서 함수를 실행한다.
- 그리고 3중 for문을 이용하여 첫 번째 for문에는 높이를 0부터 graph안에 있는 최대 높이까지 돌려주면서
- x,y 2차원 배열을 dfs 실행 시켜주고, 첫 번째 for문이 끝날 때마다 카운트랑 비교해주면서 최대값을 갱신해주면 된다.
import sys
input = sys.stdin.readline
sys.setrecursionlimit(100000)
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 -1<nx<n and -1<ny<n and visited[nx][ny] == 0 and graph[nx][ny]>h:
visited[nx][ny] = 1
dfs(nx,ny,h)
n = int(input())
graph = []
for i in range(n):
graph.append(list(map(int,input().split())))
high = 0
for i in range(len(graph)):
for j in graph[i]:
if j > high:
high = j
num = 1
for i in range(high):
visited = [[0]*n for _ in range(n)]
cnt = 0
for j in range(n):
for k in range(n):
if graph[j][k] > i and visited[j][k] == 0:
cnt += 1
visited[j][k] = 1
dfs(j,k,i)
num = max(num,cnt)
print(num)
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
백분1874(파이썬) - 스택 수열 (0) | 2021.05.24 |
---|---|
백준1926(파이썬) - 그림 (0) | 2021.05.24 |
백준1946(파이썬) - 신입사원 (0) | 2021.05.22 |
백준2156(파이썬) - 포도주 시식 (0) | 2021.05.22 |
백준1041(파이썬) - 주사위 (0) | 2021.05.22 |