여름의 서재
[백준] 14719_빗물 본문
728x90
📕 문제
https://www.acmicpc.net/problem/14719
14719번: 빗물
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치
www.acmicpc.net
💡 풀이법
1. 규칙을 찾기 위해 들여다 보면 해당 인덱스에 빗물이 차는 양은 현애 인덱스의 왼쪽에서 가장 긴 블럭, 오른쪽에서 가장 긴 블럭 중 작은 블럭의 길이만큼 차게 된다.
(단, 양쪽의 긴 블럭중 작은 블럭의 길이가 현재 인덱스보다 작다면 물이 안찬다.
2. for문을 돌며 각 인덱스마다 1번처럼 빗물을 구해서 total에 더해주었다.
3. 난 인덱스를 0부터 W-1 까지 다 보지 않고 양쪽에 물이 아예 못차는 경우를 제외하기위해 start,end를 구해주고 시작했다.
예를 들어 [0,1,2,1,3,2,4,2,0] 이렇게 블럭이 있을때 빨간색으로 칠해진 숫자 사이만 빗물이 채워지고 가쪽은 빗물이 찰 수 가 없다.
H, W = map(int, input().split())
blocks = list(map(int, input().split()))
start = 0
end = len(blocks)-1
while True:
if blocks[start] > blocks[start+1]:
break
start += 1
while end:
if blocks[end] > blocks[end-1]:
break
end -= 1
total = 0
for i in range(start+1, end):
max_block = min(max(blocks[:i]), max(blocks[i+1:]))
if blocks[i] < max_block:
total += max_block - blocks[i]
print(total)
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 5052_전화번호 목록 (0) | 2021.10.31 |
---|---|
[백준] 2688_줄어들지 않아 (dp 이용) (0) | 2021.10.31 |
[백준] 20057_마법사 상어와 토네이도 (0) | 2021.10.30 |
[백준] 1463_1로 만들기 (dp 이용) (0) | 2021.10.30 |
[백준] 3190_뱀 (0) | 2021.10.30 |
Comments