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;
}