안녕하세요. 오늘은 달력에서 개수를 셀 거예요.

문제

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

아이디어

그냥 이차원 배열 만들어서 시작 요일을 기준으로 각 요일이 몇월 며칠인지 넣어주면 됩니다. 그 다음에 문제에 나와있는대로 구현해주면 됩니다.

근데 머리를 좀 써봅시다. 굳이 배열에 넣지 않아도 되지 않을까요? 그냥 1일부터 7일까지 보면서 각 일로 시작해서 5주를 채울 수 있는지만 보면 됩니다. 즉, 현재 일 수 + 28이 존재하는지 확인해주면 됩니다.

조금만 더 생각을 해보면 시작 요일이 필요가 없음을 알 수 있습니다.

그런데 조금만 더 생각을 해보면 2022년과 2023년은 다를게 없습니다. 그냥 고려해야할 부분은 윤년 뿐입니다. 윤년인지만 확인해서 29 또는 30을 출력해주면 됩니다.

소스코드

코드를 입력하세요

#define ll long long
using namespace std;


int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll N;
    cin >> N;
    if (N % 4 == 0)
    {
        if (N % 100 == 0)
        {
            if (N % 400 == 0) cout << 30;
            else cout << 29;
        }
        else cout << 30;
    }
    else cout << 29;
}


감사합니다.

0개의 댓글