알고리즘

[백준, 2468번] 안전 영역

hminor 2023. 8. 23. 11:07

 

풀이

  • 지역의 높이 중 가장 큰 값을 구한 다음 
  • 해당 지역의 높이 전까지 반복문을 돌려 height를 기준으로 
  • 안전한 영역의 최대 개수를 출력 

 

import sys
from collections import deque
input = sys.stdin.readline

def bfs(height):
    while q:
        y,x = q.popleft()
        for ny,nx in [[-1,0],[1,0],[0,-1],[0,1]]:
            dy,dx = y+ny,x+nx
            if 0<=dy<n and 0<=dx<n and not visit[dy][dx] and arr[dy][dx] > height:
                visit[dy][dx] = 1
                q.append([dy,dx])

n = int(input())
arr = [list(map(int,input().split())) for _ in range(n)]
result = 0
q = deque([])
for height in range(0, max([max(arr[i]) for i in range(n)])+1):
    visit = [[0]*n for _ in range(n)]
    cnt = 0
    for i in range(n):
        for j in range(n):
            if not visit[i][j] and arr[i][j] > height:
                cnt += 1
                q.append([i,j])
                bfs(height)
    if cnt > result:
        result = cnt
print(result)

'알고리즘' 카테고리의 다른 글

[백준, 파이썬, 11399번] ATM  (0) 2023.08.28
[백준, 파이썬 , 10817번] 세 수  (0) 2023.08.28
[백준, 10026번] 적록색약  (0) 2023.08.23
[백준, 13116번] 30번  (0) 2023.08.21
[백준, 9372번] 상근이의 여행  (0) 2023.08.21