반응형
https://www.acmicpc.net/problem/7770
수학공식을 찾는 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
전체 블로의 개수 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 |