문제
Baekjoon 2468: 안전 영역
- 설명: 영역의 높이가 주어질 때, 안전 영역의 개수를 최대화 하라.
풀이
비의 양이 100이 넘어가면 당연히 최대 높이를 넘어가기에 100까지만 비가 온다고 생각해보면
모든 위치는 $100 \times 100$개 이고 이를 $0 ~ 100$의 강수량에 따라 안전지역을
Bruteforce
로 찾으면충분히 시간 내에 안전지역을 찾을 수 있다.
안전지역을 찾는 것은 현재 주어진 강수량을 기준으로 더 큰 값들이 이어지는 개수를 세준다.
- 이렇게 DFS, BFS를 통해 그래프에서 이어진 부분을 탐지한 후 안전지역의 숫자를 늘려준다.
오늘의 회고
- 모든 지역의 높이가 1이고 비가 하나도 오지 않을 때 답은 1이지만,
- 비가 무조건 올 것이라고 생각하여서 이 경우 1을 반환하여서 틀렸었다.
- 조금 더 엄밀하게 엣지 케이스를 생각하면서 풀어야겠다
Code
# Baekjoon02468.py
import sys
input = sys.stdin.readline
sys.setrecursionlimit(1_000_000)
MOVES = [(-1, 0), (0, 1), (1, 0), (0, -1)]
n = int(input())
area = [list(map(int, input().split())) for _ in range(n)]
def get_safe_area(rain):
visited = [[False] * n for _ in range(n)]
def dfs(curr):
for i, j in MOVES:
new_row, new_col = curr[0] + i, curr[1] + j
if (0 <= new_row < n) and (0 <= new_col < n):
if not visited[new_row][new_col] and area[new_row][new_col] > rain:
visited[new_row][new_col] = True
dfs((new_row, new_col))
result = 0
for i in range(n):
for j in range(n):
if not visited[i][j] and area[i][j] > rain:
visited[i][j] = True
dfs((i, j))
result += 1
return result
ans = 0
for i in range(0, 101):
ans = max(ans, get_safe_area(i))
print(ans)
'Problem Solving > 항해99' 카테고리의 다른 글
99클럽 코테 스터디 6일차 TIL + Graph, DFS (0) | 2025.04.08 |
---|---|
99클럽 코테 스터디 5일차 TIL + 투 포인터 (0) | 2025.04.07 |
99클럽 코테 스터디 3일차 TIL + 구현 (0) | 2025.04.03 |
99클럽 코테 스터디 2일차 TIL + DP (0) | 2025.04.02 |
99클럽 코테 스터디 1일차 TIL + 해시테이블, 정렬 (0) | 2025.03.31 |