Programing/백준, 프로그래머스(C++)

[C++][백준 2292] 벌집

hye3193 2025. 1. 3. 18:02

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

제출 코드

#include <iostream>
using namespace std;

int getRoom(int a)
{
    if (a == 1) return 1;
    return (6 * (a - 1)) + getRoom(a - 1);
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;

    for(int i = 1; i < n + 1; i++)
    {
        int r = getRoom(i);
        if (n <= r)
        {
            cout << i;
            break;
        }
    }
}

맨 처음에는 재귀함수를 이용해 매 시도마다 수를 계산했는데

풀어놓고 보니 굳이 저렇게 풀지 않고도 매번 건너온 방의 개수에 6을 곱해준 수를 더 해서 비교하는 식으로 풀어도 됐다

#include <iostream>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n;
    int room = 1;
    int count = 1;
    cin >> n;

    while (n > room)
    {
        room += 6 * (count);
        count++;
    }

    cout << count;
}

속도가 확실히 빨라졌다