C++/Baekjoon (C++)
[백준 / C++] 2292. 벌집
또김또
2022. 8. 6. 22:14
https://www.acmicpc.net/problem/2292
2292번: 벌집
위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌
www.acmicpc.net
같은 줄 (중앙에서부터 각 한 겹) 에 있는 벌집의 경우 출력값이 같다.
이것을 가지고 규칙성을 구하고자 했다.
1 : 1개
2 ~ 7 : 2개
8 ~ 19 : 3개
20 ~ 37 : 4개
38 ~ 61 : 5개
이렇게 보면 규칙성이 없는 것 같아 보이지만, 끝 수를 보면, 1 / 7 / 19 / 37 / 61 ... 이고, 각 수의 차를 구하면 6 / 12 / 18 / 24 ... 이고, 6씩 커지는 규칙성이 있다. 이는 계차수열의 특징이다.
계차수열의 점화식을 이용하면, Bn = 6n이고, An = 1이라고 할 때, 일반항을 구하면 An = 3n^2 + 3n +1 이다.
이때 n에 대하여 근의공식을 활용하면, n = ( 3 ± √12An - 3 ) / 6 이고, An = 1 이므로 n = ( 3 + √12An - 3 ) / 6 이다.
여기서 우리가 유도한 An 은 입력받은 값이며, 구한 값의 소숫점을 올림 처리하면 정답이 나온다.
제출 답안
#include <iostream>
#include <cmath>
using namespace std;
int main(void){
double input, save, n;
cin>> input;
double calc = pow((12 * input - 3),0.5);
n = ceil((3 + calc)/6);
cout<< n;
}