위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.
1을 시작으로 6씩 증감되며 단계가 올라가는 수열로 생각하였다.
Ex.
1 : 1
2 : 2 - 7 (1+6)
3 : 8 - 19 (1+6+12)
4 : 20 - 38 (1+6+12+18)
이런식의 규칙을 가지므로 수열의 점화식으로 표현하면
위와 같은 일반항을 구할 수 있고, 이를 프로그래밍으로 n을 1씩 증가하면서 m단계의 상태인지를 비교하는 코드를 짜면 아래와 같다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N,m=1;
cin >> N;
while(N>3*m*(m-1)+1)
m++;
cout << m;
}