https://www.acmicpc.net/problem/30923
h에 영향을 받는 면의 넓이가 어떤 형식으로 결정되는지를 고민하면 됩니다.
#include <iostream>
using namespace std;
int N, prevH, h;
long long area;
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
cin >> N;
for (int i = 0; i < N; ++i)
{
cin >> h;
area += abs(h - prevH);
area += h * 2;
area += 2;
prevH = h;
}
area += prevH;
cout << area;
return 0;
}
모든 막대에 대해서 윗면과 아랫면은 1씩 사용합니다.
다른 면과 맞닿지 않은 면의 경우 h만큼 사용합니다.
다른 면과 맞닿은 면은 이전 높이만큼 가려지므로 현재 높이에서 이전 높이를 뺀 값의 절댓값만큼 사용됩니다.