안녕하세요. 오늘은 벼락치기를 할 거예요.

문제

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

아이디어

만약 정답이 x라고 합시다. 그러면 x+(x-1)+(x-2)+...+(x-6)이 N이상이고 이걸 만족하는 x가 최소의 정수입니다. 이말은 7x-21이 N이상이고 N이상이고 가장 작은 7의 배수를 찾으면 정답을 찾을 수 있는 것입니다. 이 부분은 쉽습니다. 하지만 문제는 예외처리입니다. N이 28미만인 경우를 잘 생각해주면 됩니다.

소스코드

#include <iostream>
#define ll long long
using namespace std;

int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll N, i;
    cin >> N;

    if (N == 1) cout << 1;
    else if (N <= 3) cout << 2;
    else if (N <= 6) cout << 3;
    else if (N <= 10) cout << 4;
    else if (N <= 15) cout << 5;
    else if (N <= 21) cout << 6;
    else
    {
        for (i = N;; i++)
        {
            if (i % 7 == 0)
            {
                cout << i / 7 + 3;
                return 0;
            }
        }
    }
}


감사합니다.

0개의 댓글