SWEA/[D1]

[C언어] SWEA 2056 연월일 달력

ruming 2022. 3. 2. 01:13

8자리 숫자가 날짜로 유효하면 YYYY/MM/DD형식으로 출력

유효하지 않으면 -1을 출력

2월은 28인 경우만 고려한다.

 

switch case문을 이용해 월 별로 케이스를 나눴다.

#include <stdio.h>
int main(void) {
    int test_case, T;
    scanf("%d", &T);
    for (test_case = 1; test_case <= T; test_case++) {
        int date;
        scanf("%d", &date);
        int y, m, d;
        y = date / 10000;
        m = date % 10000 / 100;
        d = date % 100;
        printf("#%d ", test_case);
        switch (m) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            if (d >= 1 && d <= 31) {
                printf("%04d/%02d/%02d", y, m, d);
            }
            else {
                printf("-1");
            }
            break;
        case 2:
            if (d >= 1 && d <= 28) {
                printf("%04d/%02d/%02d", y, m, d);
            }
            else {
                printf("-1");
            }
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            if (d >= 1 && d <= 30) {
                printf("%04d/%02d/%02d", y, m, d);
            }
            else {
                printf("-1");
            }
            break;
        default:
            printf("-1");
        }
        printf("\n");
    }
    return 0;
}

전에 풀었던 코드가 더 효율적이다. 퇴화했나..

범위에 따라 달에 해당하는 날짜의 값인지 아닌지 조건문으로 검사한다. default로 자연스럽게 월 범위도 검사하게 된다.

출력할 때는 형식에 유의한다. 

 

 

배열에 각 월에 해당하는 일수를 저장하고 년, 월, 일 순서대로 범위에 맞는지 체크한다. 앞에서는 년까지는 체크를 안했는데 통과했었다.

#include <stdio.h>
int main(void) {
    int test_case, T;
    scanf("%d", &T);
    for (test_case = 1; test_case <= T; test_case++) {
        int date, y, m, d;
        int day[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
        scanf("%d", &date);
        y = date / 10000;
        m = (date / 100) % 100;
        d = date % 100;
        if (y >= 0) {
            if (m >= 1 && m <= 12) {
                if (d <= day[m - 1] && d >= 1) {
                    printf("#%d %04d/%02d/%02d\n", test_case, y, m, d);
                    continue;
                }
            }
        }
        printf("#%d -1\n", test_case);
    }
    return 0;
}