https://www.acmicpc.net/problem/30052
아이디어
- 끝과 끝 사이의 거리가 D보다 작다면 이길 수 없다.
- 각 칸에서 가능한 최대 책시 거리가 D 미만이라면 해당 칸을 차단해야 한다.
- 출력은 차단한 칸들의 집합이다.
풀이
N, M = map(int, input().split())
D = int(input())
max_distance_from_edge = (N-1) + (M-1)
if max_distance_from_edge < D:
min_blocks = 0
else:
required_blocks = [[0] * M for _ in range(N)]
for i in range(N):
for j in range(M):
furthest_distance = max(
i + j,
(N-1-i) + j,
i + (M-1-j),
(N-1-i) + (M-1-j)
)
if furthest_distance < D:
required_blocks[i][j] = 1
min_blocks = sum(sum(row) for row in required_blocks)
print(min_blocks)
'학습 노트 > 알고리즘 (Python)' 카테고리의 다른 글
99클럽 - RGB거리 (0) | 2024.05.01 |
---|---|
99클럽 - 진짜 공간 (0) | 2024.04.27 |
99클럽 - 롤케이크 자르기, 주차 요금 계산 (0) | 2024.04.27 |
99클럽 - 역습 (0) | 2024.04.26 |
99클럽 - 선택의 기로 (0) | 2024.04.24 |