C++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int H, W; // 세로, 가로 순
int idx, max = -1;
int answer = 0;
int arr[505] = {
0,
};
cin >> H >> W;
for (int i = 0; i < W; i++)
{
cin >> arr[i];
if (max < arr[i])
{
max = arr[i];
idx = i;
}
}
int end = idx;
// 왼쪽 탐색
while (end > 0)
{
int newMax = -1;
int newIdx = 0;
for (int i = 0; i < end; i++)
{
if (newMax < arr[i])
{
newIdx = i;
newMax = arr[i];
}
}
for (int i = newIdx + 1; i < end; i++)
{
answer += newMax - arr[i];
}
end = newIdx;
}
int start = idx;
while (start < W - 1)
{
int newMax = -1;
int newIdx = 0;
for (int i = start + 1; i < W; i++)
{
if (newMax < arr[i])
{
newIdx = i;
newMax = arr[i];
}
}
for (int i = start + 1; i < newIdx; i++)
{
answer += newMax - arr[i];
}
start = newIdx;
}
cout << answer << endl;
}
가장 큰 값을 기준으로 왼쪽 오른쪽 좌표를 변경해 가면서 빗물의 양을 계산해줬는데 그냥 쭉 진행하면서 왼쪽 오른쪽 벽돌의 높이를 비교했어도 됐을 거 같다 ㅠㅠ 다른 사람들의 코드를 보고 반성을 하게되는 문제였다..