[C++] 백준 2292번 벌집

xyzw·2025년 8월 28일
0

algorithm

목록 보기
70/97

https://www.acmicpc.net/problem/2292

풀이

문제의 그림을 보면 1번 방, 2번~7번 방, 8번~19번 방과 같이 여러 방들이 링을 형성하고 있다.

그리고 1번 방에서 어떤 방까지 지나는 최소 방 개수는 해당 방이 위치한 링이 결정한다.
즉, 1번 방에서부터 n번째 링의 모든 방까지는 n개의 방을 지난다.

링을 이루고 있는 방의 개수는 1, 6, 12, 18, 24, ... 개로,
첫번째 링을 제외한 모든 링의 방 수를 6의 등차수열로 나타낼 수 있다.

따라서 n(n>1)번째 링에서의 최대 번호 방은 1 + 6 * (1 + 2 + 3 + ... + n) 이다.

이 성질을 이용하여 k번 방이 어떤 링에 위치하는지만 알아내면 된다.

코드

#include <iostream>

using namespace std;

int main()
{
    int N;
    cin >> N;
    
    int ring = 1, sum = 1;
    while(N > sum) {
        sum += ring * 6;
        ring++;
    }
    
    cout << ring;

    return 0;
}

0개의 댓글