문제 설명
배열이 주어지면 모든 (i+1) th 수준은 이전 수준보다 더 큰 합계를 가진 더 많은 요소를 포함합니다.
예시
입력 배열이 {40, 100, 20, 30}이면 답은 −
와 같이 2입니다.피라미드의 맨 아래 수준에는 100과 20이 있고 피라미드의 상위 수준에는 40 또는 30이 있습니다.
알고리즘
우리의 솔루션은 피라미드에 대해 가능한 최대 높이 h가 있는 경우 ( h * (h + 1) ) / 2개의 요소가 배열에 있어야 한다는 논리에 있습니다.
예시
#include <bits/stdc++.h>
using namespace std;
int getMaximumHeight(int *arr, int n) {
int result = 1;
for (int i = 1; i <= n; ++i) {
long long y = (i * (i + 1)) / 2;
if (y < n) {
result = i;
} else {
break;
}
}
return result;
}
int main() {
int arr[] = {40, 100, 20, 30};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Result = " << getMaximumHeight(arr, n) << endl;
return 0;
} 출력
위의 프로그램을 컴파일하고 실행할 때. 다음 출력을 생성합니다 -
Result = 2