#include <iostream>
int N; // int로 커버 가능
int d = 1, tmp = 0, cnt = 0;
int main(int argc, char **argv){
scanf("%d", &N);
while(tmp < N){
tmp += d;
cnt++;
if(tmp < N){
d = 6*cnt; // 한 줄에 6씩 증가한 별집 수.
}
}
printf("%d\n", cnt);
return 0;
}
뭔가 뿌듯하다. 되게 간결하게 문제의 주어진 의도를 잘 파악하여 문제를 푼 것 같다.
벌집의 최소 경로는 벌집의 겹(?)의 수이다. 그러니까 1번 겹은 1, 2번겹은 2~7, 3번 겹은 8~19 ... 이 벌집의 겹 수는 1, 6, 12 ,18 이렇게 6의 배수로 증가한다.
그러므로 벌집의 최소 경로를 알려면 해당 숫자가 위치한 벌집은 몇번째 겹에 있는지 알 면 풀 수 있다.
따라서 cnt로 몇번째 벌집의 겹인지를 센 후, d로 벌집이 늘어나는 배수를 구한다. 해당 배수를 어하여 tmp로 cnt 번째 겹에는 총 벌집의 수가 몇개인지를 구한다. 해당 수가 N보다 큰 경우에는, cnt 번째 겹에 N이 존재하는 것이므로 cnt를 출력하면 된다.