- μκ° μ ν λ΄μ λͺ» νμλ λ¬Έμ . μ½κ² μκ°νμΌλ©΄ νμμ κ² κ°μλ° λ무 κ²½μ°μ μλ₯Ό λ μ μΆλ €λ΄λ €κ³ νλκ² μ€μμλ κ² κ°λ€.
- 2865.Β Beautiful Towers Iμ λκ°μ λ¬Έμ μΈλ° arrayμ κΈΈμ΄κ° μΈ μ μ΄ λ€λ₯΄λ€.
- νλ§λλ‘ λ§νλ©΄ μ 체 κ²½μ°μ μλ₯Ό λ€ μλν΄ λ³Ό μ μλ€λ κ²μ΄λ€.
- λͺ¨λ κ²½μ°μ μλ₯Ό λ€ μλνλ©΄ μκ° μ νμ κ±Έλ¦°λ€.
- λ°λΌμ μ 체 κ²½μ°μ μ μ€ κ°λ₯μ± μλ index
maxIndices
λ₯Ό μΆλ €λ΄μΌ νλ€.
- κ²°κ³Όκ°μ μ΅λν ν μ μλ ν보 indexλ
maxHeights[index]
κ°μ΄ peakκ° λλ μ§μ μ μλ λͺ¨λ indexμ ν΄λΉλλ€.
- λμ΄μ λ³ν
dir
λ₯Ό μΆμ νμ¬ λμ΄κ° κ°μνκ³ μμ§ μμ μν dir β -1
β κ°μνλ μν dir = -1
λ‘ λ³ννλ μ§μ μ μ°Ύλλ€.
- λλ¨Έμ§ κ³Όμ μ μ΄μ λ¬Έμ μ λμΌνλ€.
class Solution {
public:
long long maximumSumOfHeights(vector<int>& maxHeights) {
vector<int> maxIndices;
int dir = 0, prev = 0;
for (int i = 0; i < maxHeights.size(); ++i) {
int curr = maxHeights[i];
if (curr > prev) {
dir = 1;
} else if (curr < prev) {
if (dir != -1) maxIndices.push_back(i - 1);
dir = -1;
} else {
dir = 0;
}
prev = curr;
}
if (dir != -1) maxIndices.push_back(maxHeights.size() - 1);
long long maxSum = 0;
for (auto maxIndex : maxIndices) {
int maxHeight = maxHeights[maxIndex];
long long sum = maxHeight;
int curHeight = maxHeight;
for (int i = maxIndex - 1; i >= 0; --i) {
if (maxHeights[i] < curHeight) {
curHeight = maxHeights[i];
}
sum += curHeight;
}
curHeight = maxHeight;
for (int i = maxIndex + 1; i < maxHeights.size(); ++i) {
if (maxHeights[i] < curHeight) {
curHeight = maxHeights[i];
}
sum += curHeight;
}
if (sum > maxSum) maxSum = sum;
}
return maxSum;
}
};