안녕하세요. 오늘은 피라미드를 쌓을 거예요.
https://www.acmicpc.net/problem/7770
N층짜리 피라미드를 쌓으려면 1층부터 N층까지를 쌓아야합니다. 이때 1층은 가장 위에있는 하나짜리입니다.
i층을 쌓을때 필요한 블록의 수는 어떻게 될까요? 잘 생각해보면 4*(1부터 i-1까지의 합)+1이 됩니다. 그러므로 2xix(i-1)+1이 됩니다. i가 1부터 N까지 이 값의 합이 N층짜리 피라미드를 쌓을 때 필요한 블록의 수 입니다. 그러므로 i를 0부터 하나씩 늘려가면서 그 누적합이 입력값을 초과하는 순간 i-1을 출력해주면 됩니다.
#include <iostream>
#define ll long long
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(false); cin.tie(NULL);
ll N, i, sum = 0;
cin >> N;
for (i = 1;; i++)
{
sum += 2 * i * (i - 1) + 1;
if (sum > N) break;
}
cout << i - 1;
}
감사합니다.