March 14, 2021
그림과 같은 지형에 비가 왔다고 가정했을 때 고여있을 물의 부피를 구하는 문제
지형을 3가지 영역으로 나눠서 볼 수 있다.
발그림 ㅈㅅ
1번 영역은 시작부터 가장 높은 봉우리까지이다.
2번 영역은 가장 높은 봉우리가 2개 이상일 때 나타난다.
/**
* @param {number[]} height
* @return {number}
*/
var trap = function(height) {
const max = Math.max(...height)
const firstIdx = height.indexOf(max)
const lastIdx = height.lastIndexOf(max)
let result = 0
let highest = 0
const calc = current => {
if (highest > current) result += highest - current
else highest = current
}
for (let i = 0; i < firstIdx; i++) {
calc(height[i])
}
highest = 0
for (let i = height.length - 1; i >= lastIdx; i--) {
calc(height[i])
}
for (let i = firstIdx; i < lastIdx; i++) {
result += max - height[i]
}
return result
}