[C++] 백준 2292 : 벌집

Kim Nahyeong·2022년 1월 11일
0

백준

목록 보기
53/157

#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를 출력하면 된다.

0개의 댓글