https://leetcode.com/problems/trapping-rain-water/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int>& height) {
int answer = 0;
int maxHeightIndex = max_element(height.begin(), height.end())-height.begin();
int maxHeight = 0;
for (int i = 0; i < maxHeightIndex; i++)
{
if (maxHeight <= height[i]) maxHeight = height[i];
else
{
answer += maxHeight - height[i];
}
}
maxHeight = 0;
for (int i = height.size() - 1; i > maxHeightIndex; i--)
{
if (maxHeight <= height[i]) maxHeight = height[i];
else
{
answer += maxHeight - height[i];
}
}
return answer;
}
풀이
최고점을 먼저 찾는다 -> 점점 최고점으로 양쪽에서 다가가도록 for문을 두번 돌린다. -> i보다 maxHeight가 작다면 i를 maxHeight에 저장하고 /// i보다 maxHeight가 크다면 maxHeight-height[i]만큼 answer에 더해준다. (이게 가능한 이유는 최고점으로 다가가서, maxHeight-height[i]이 아닌 더 적은 물이 채워질 가능성을 배제했기 때문이다.)
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[221020] Level_ 1 문자열 내 마음대로 정렬하기 (0) | 2022.10.20 |
---|---|
[221019] KAKAO [1차] 비밀지도 (0) | 2022.10.19 |
[220914] Level_1 최대공약수와 최소공배수 (0) | 2022.09.14 |
[220830] Level_ 1 나누어 떨어지는 숫자 배열 (0) | 2022.08.30 |
[220825] Level_ 1 문자열 내 p와 y의 개수 (0) | 2022.08.25 |