https://www.acmicpc.net/problem/14719
1. 해결방법
"""
1. 아이디어
- 세로 H와 가로 W를 입력받아 2차원 배열을 만든다.
- 특정 위치를 기준으로 양 옆에 자신보다 작은 높이의 블록이 있다면 물이 고일 수 없다.
- 특정 위치에서 왼쪽에서 가장 큰 블록과 오른쪽에서 가장 큰 블록중에서 비교한다.
- 왼쪽, 오른쪽에서 가장 큰 블록을 비교해서 둘 중 작은 블록을 구한다.
- 만약 구한 블록 값이 해당 위치의 블록 값보다 크다면, 구한 블록에서 해당 위치의 블록을 빼주면 해당 위치에서의 고인 물 양이 된다.
"""
2. 정답코드
import sys
input = sys.stdin.readline
H, W = map(int, input().split())
graph = list(map(int, input().split()))
def main():
result = 0
for i in range(1, W - 1):
left_max = max(graph[:i])
right_max = max(graph[i + 1:])
value_min = min(left_max, right_max)
if value_min > graph[i]:
result += value_min - graph[i]
return result
print(main())
역시나 아이디어를 코드로 옮기지는 못했다.
특히나 고인 빗물의 양을 구하는 방식을 잘못 구해버려서 어리둥절했다.
그리고, 파이썬 리스트 문법도 부족했던 것 같다. [:i], [i + 1:]이 부분도 역시 알아둬야겠다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 3273. 두 수의 합 (0) | 2022.09.01 |
---|---|
[BOJ] 2559. 수열 (0) | 2022.09.01 |
[BOJ] 17144. 미세먼지 안녕! (0) | 2022.08.04 |
[BOJ] 16234. 인구 이동 (0) | 2022.07.18 |
[BOJ] 14891. 톱니바퀴 (0) | 2022.07.16 |