반응형
이 문제는 새로운 유형이라서 처음에 어떻게 풀어야 할지 난감했다.
그러나 생각해보니 굉장히 쉽게 접근할 수 있었고, 재미있었다.
문제 링크 : https://www.acmicpc.net/problem/14719
문제 정보 :

어떻게 풀지 감을 못잡았는데,
차근차근 하나씩 생각해보기로 했다.
아래는 첫번째 예제에 대해서 그림과 식을 그려보며 생각해본것이다.

예제 1만 생각을 해봐도, 쉽게 식에 도달할 수 있었다.
양옆의 가장 큰 두 값 중에서 작은 값을 가져온다.
그리고 현재의 블럭의 크기만큼 빼준다.
그러나 예제 2번에서 예외의 상황을 하나 보여주는데,
양 옆보다 크기가 클 때의 값은 어떻게 처리할 것인가? 에 대한 생각을 주는 예시였다.
아래는 예시 2를 그려본 것이다.

그래서 양 옆의 값을 봐줄 때,
자기 자신의 크기도 봐주는 것으로 수정했다.
정답 코드
### 14719 번 빗물
import sys
H, W = input().split()
input = sys.stdin.readline
number = list(map(int, input().split()))
sum = 0
for i in range(1, int(W)-1):
sum += min(max(number[:i+1]), max(number[i:]))
sum -= int(number[i])
print(sum)
다른 사람의 코드를 봤는데,
그냥 마지막에 처음부터 끝까지 본인 블럭의 크기를 빼주면 되었던 것 같다..
나는 은근 쉬운거를 어렵게 해결하는 부분도 있는듯하다.
반응형