[백준] 빗물

유승선 ·2022년 5월 27일
0

백준

목록 보기
5/64

백준 플렛폼에서 추천받은 빗물이라는 문제이다. 문제는 꽤 간단하고 요구하는것도 이해하기 쉽게 만들어졌다. 예전에 그랩에서 나온 코딩테스트에서 이거랑 똑같은 문제가 나왔던 적도 있었는데 그때는 다른 문제 푸느라 시간이 없어서 못풀었지만 이 문제를 보니깐 되게 반가웠다.

건물 사이에서 고이게 되는 빗물의 양을 리턴해야한다. 내가 처음에 구상했던 아이디어는 맨 왼쪽 건물을 기준으로 하고 벡터를 읽으면서 만약 내가 기준으로 한 건물과 동일 하거나 더 높은 건물이 나온다면 그 기준과 새로운 건물 사이에 있는 공간에서는 백퍼센트 물이 고이기때문에 amount 를 더해주었다.

하지만 내가 생각했던 이 아이디어가 좀 에러한 부분이 하나 있었는데 꼭 뒤에 있는 건물의 크기가 내가 기준으로한 빌딩 보다 같거나 클 필요는 없었다. 예를 들어 첫번째 예시에서도 4개 빌딩을 기준으로 삼았을때도, 마지막 2개 빌딩사이에서도 빗물이 고이기 때문에 이런 식의 접근은 매우 틀렸다.

생각해보면 더 간단히 풀수도 있지 않았을까 하는 문제였다. 일단 처음건물과 마지막 건물은 무슨 짓을 해도 물이 고이지 않는다. 그러므로 내가 탐색해야 할 부분은 그 사이에 있는 W개의 건물들. 그리고 한 건물을 마주칠때마다 왼쪽과 오른쪽을 따로 탐색해주어서 가장 높은 빌딩을 찾아주었다. 왜냐면은 물이 고이게 된다해도 왼쪽과 오른쪽 가장 큰 건물중 (더 작은 건물 - 현재 건물) 높이가 amount 가 되기때문이다. 물론 이 과정에서 음수가 나올수있으나, 이 경우를 제외하고는 amount 에 추가해주면은 답이 나올수있다.

배운점:
1. 시뮬레이션은 좀 더 입체적으로 생각해보자.
2. 문제를 많이 풀어봐야 할거같다.

profile
성장하는 사람

0개의 댓글