#include <stdio.h>

int main()
{
    printf("8");
}

'SFPC > 2021' 카테고리의 다른 글

2021 SFPC pB1 ver.2  (0) 2023.02.15
2021 SFPC E0  (0) 2023.02.14
2021 SFPC E1  (0) 2023.02.14
2021 SFPC D1  (0) 2023.02.11
2021 SFPC C2  (0) 2023.02.10
2021 SFPC C1  (0) 2023.02.10
#include <stdio.h>

// 입력 : d(소수값을 확인하는 정수)
// 출력 : d가 소수이면 1, 아니면 0
int is_prime(int d)
{
    // i = 약수
    for (int i = 2; i < d; i++)
    {
        // 만약 d % i를 했는데 0이 나오면 i가 약수이므로 d는 소수가 아니니
        // 0을 리턴한다.
        if (d % i == 0) return 0;
    }
    // 2부터 d - 1까지 약수가 하나도 없다면 1을 리턴한다.
    return 1;
}

int main()
{
    long long n;

    scanf("%lld", &n);
    // a = 오늘 칭찬 스티커를 받은 학생 수
    // b = 지금까지 칭찬 스티커를 받은 학생 수
    long long a = 1, b = 1;

    // 3월 1일부터 스티커를 주기 시작하므로
    // month를 3, days를 1로 설정한다.
    int month = 3;
    int days = 1;
    // count에는 며칠이 걸리는지 저장하므로 1로 정해준다.
    int count = 1;
    while (1)
    {
        // 종료 조건 : 칭찬 스티커를 n 이상 받았을 경우
        if (b >= n)
        {
            printf("%d", count);
            return 0;
        }

        // days를 1 만큼 늘려서 시간이 갔음을 표현하고
        // count를 1 만큼 늘려 정답을 만든다.
        days++;
        count++;
        // 가장 큰 테스트 케이스의 정답이 4월 달 안에서 끝났으므로(n = 1e17일 떄 49일 걸림)
        // 3월 31 다음인 4월 1일로 설정
        if (days > 31)
        {
            // month를 1 올려 다음 달로 넘어가고
            // days를 1로 하여 다음달의 시작점을 저장시킨다.
            month++;
            days = 1;
        }
        // 칭찬 스티커 배급
        if (is_prime(days))
        {
            // days가 소수이므로 3을 곱해준다.
            a *= 3;
            // b에 a를 누적한다.
            b += a;
        }
        else
        {
            // days가 소수가 아니므로 2를 곱해준다.
            a *= 2;
            // b에 a를 누적한다.
            b += a;
        }
    }
}

'SFPC > 2021' 카테고리의 다른 글

2021 SFPC E0  (0) 2023.02.14
2021 SFPC E1  (0) 2023.02.14
2021 SFPC D0  (0) 2023.02.11
2021 SFPC C2  (0) 2023.02.10
2021 SFPC C1  (0) 2023.02.10
2021 SFPC C0  (0) 2023.02.10

+ Recent posts