ebson

boj.kr/2468 안전 영역 (silver1) 파이썬 풀이 본문

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차원배열에서 최소, 최대값을 구할 수 있다.

Comments