ALGORITHM STUDY WITH PYTHON/Bruteforce
boj.kr/2468 안전 영역 (silver1) 파이썬 풀이
ebson
2023. 4. 21. 15:42
1 전체 영역에서 최고, 최저 높이 추출
2 최저-1 -> 최고 높이 까지 검사하면서 아래 반복
2.1. board 를 순회하면서 미방문 안전지대의 경우 안전영역개수 cnt 증감하고
2.2. dfs 방식으로 탐색하면서 미방문 상태이면서 안전한 좌표를 방문체크
2.3. 안전영역개수 cnt를 cnt_list에 저장
3. cnt_list에서 최대값을 출력
N = int(input())
board = [list(map(int, input().split())) for _ in range(N)]
import sys
sys.setrecursionlimit(10**9)
dy = (1, -1, 0, 0)
dx = (0, 0, 1, -1)
def dfs(y, x, h):
for i in range(4):
ny = y + dy[i]
nx = x + dx[i]
if 0<=ny<N and 0<=nx<N and visited[ny][nx] == 0:
if board[ny][nx] >= h:
visited[ny][nx] = 1
dfs(ny, nx, h)
min_h = 1e9
max_h = -1e9
min_h = min(map(min, board))
max_h = max(map(max, board))
cnt_list = []
for h in range(min_h, max_h+1):
visited = [[0] * N for _ in range(N)]
cnt = 0
for y2 in range(N):
for x2 in range(N):
if board[y2][x2] >= h and visited[y2][x2] == 0:
visited[y2][x2] = 1
dfs(y2, x2, h)
cnt += 1
cnt_list.append(cnt)
print(max(cnt_list))
min(map(min, 2차원배열))
max(map(max, 2차원배열))
위와 같이 각각 2차원배열에서 최소, 최대값을 구할 수 있다.