본문 바로가기

Algorithm/Math

(C++) - 백준(BOJ) 7770 : 아즈텍 피라미드

반응형

https://www.acmicpc.net/problem/7770

 

7770번: 아즈텍 피라미드

첫째 줄에 블록 n개로 만들 수 있는 가장 높은 안정적인 피라미드의 높이를 출력한다.

www.acmicpc.net

수학공식을 찾는 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

전체 블로의 개수 allBlock, 쌓은 블록의 중간 개수를 저장할 block, 쌓은 높이를 저장할 height를 선언하고 allBlock에 전체 블록의 개수를 입력해줍니다.

📔 풀이과정

피라미드를 꼭대기부터 바닥으로 쌓는다고 생각해봅니다. 최소로 유효하게 쌓인 모양은 아래층이 십자가의 형태를 하게 됩니다. 따라서 계차수열 이므로 공식을 적용하게 되면 1층씩 쌓일때 2 * height ^ 2 + 2 * height + 1이 됩니다. 이를  while loop를 돌면서 allBlock을 넘을 때까지 block에 누적해 더해주면 됩니다. 

📔 정답출력

height - 1를 출력합니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
int allBlock, block, height;
int main(){
    cin >> allBlock;
    while(block <= allBlock) {
        block += 2 * height * height + 2 * height + 1;
        height++;
    }
    cout << height - 1;
}

'Algorithm > Math' 카테고리의 다른 글

(C++) - 백준(BOJ) 8658 : Liczba  (0) 2022.01.30
(C++) - 백준(BOJ) 8246 : Stół  (0) 2022.01.25
(Python) - 백준(BOJ) 7523 : Gauß  (0) 2022.01.09
(C++) - 백준(BOJ) 6696 : Too Much Water  (0) 2021.12.28
(C++) - 백준(BOJ) 8674 : Tabliczka  (0) 2021.12.21