문제
14719번: 빗물
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치
www.acmicpc.net
처음 작성한 코드
import sys
h, w = map(int, sys.stdin.readline().split())
block = list(map(int, sys.stdin.readline().split()))
rain = 0
for i in range(w):
left_max = max(block[:i+1])
right_max = max(block[i:])
point = min(left_max,right_max)
rain += abs(point - block[i])
print(rain)
- 자신을 포함한 왼쪽에서 제일 높은 블럭을 구한다.
- 자신을 포함한 오른쪽에서 제일 높은 블럭을 구한다.
- 1번과 2번에서 구한 블럭 중 더 낮은 블럭을 구한다. 이를 기준으로 빗물이 고일 것이기 때문
- 현재 인덱스와 더 낮은 블럭(3번에서 구한 블럭)과의 차이를 더해준다.
깨달은 점
- 사실 다른 분 코드 보고 짰다.. 처음에 생각한 방법은 현재 인덱스에서 오른쪽으로 가면서 나보다 높은 블럭을 만나기 전까지 만났던 블럭들의 차이를 더해주는 식으로 짜려고 했는데 생각해보니 그럼 나보다 낮은 애들이 나오면 어쩌지? 라는 생각에 계속 정체됐던 것 같다.. 사람들은 너무 똑똑행!
'Baekjoon' 카테고리의 다른 글
[백준 1744] 수 묶기 (0) | 2021.03.07 |
---|---|
[백준 2668] 숫자고르기 (0) | 2021.03.06 |
[백준 15998] 카카오머니 (0) | 2021.02.27 |
[백준 15591] MooTube (Silver) (0) | 2021.02.27 |
[백준 1167] 트리의 지름 (0) | 2021.02.26 |