728x90
반응형
문제:
2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다.
비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까?
입력:
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500)
두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치부터 차례대로 W개 주어진다.
따라서 블록 내부의 빈 공간이 생길 수 없다. 또 2차원 세계의 바닥은 항상 막혀있다고 가정하여도 좋다.
출력:
2차원 세계에서는 한 칸의 용량은 1이다. 고이는 빗물의 총량을 출력하여라.
빗물이 전혀 고이지 않을 경우 0을 출력하여라.
풀이방법:
양 끝점을 제외한 칸에서부터 왼쪽과 오른쪽을 각각 탐색해서 가장 낮은 위치를 찾아내고, 왼쪽의 가장 낮은 위치와 오른쪽의 가장 낮은 위치 더 낮은 값이 해당 칸에 빗물이 고인 수치다. 이 과정을 모든 칸에 진행하면서 값을 누적시키면 최종 답을 구할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
H, W = map(int,input().split())
block = list(map(int,input().split()))
answer = 0
for cur in range(1, W-1):
left_block = block[cur]
for i in range(cur-1,-1,-1):
if left_block < block[i]:
left_block = block[i]
right_block = block[cur]
for j in range(cur+1,W):
if right_block < block[j]:
right_block = block[j]
min_block = min(left_block, right_block)
answer += min_block-block[cur]
print(answer)
|
cs |
문제링크:
https://www.acmicpc.net/problem/14719
728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
[BOJ]1057. 토너먼트 (0) | 2021.09.16 |
---|---|
[BOJ] 14890. 경사로 (0) | 2021.09.15 |
[BOJ]2470. 두 용액 (0) | 2021.09.13 |
[BOJ]1655. 가운데를 말해요 (0) | 2021.09.10 |
[BOJ]2110. 공유기 설치 (0) | 2021.09.09 |