WEEKLYCALENDAR 알고리즘 오답관련 질문입니다

  • OpenJDK
    OpenJDK

    drawCal함수가 달력 그리는 함수입니다.
    strcmp로 날짜를 비교하여 일요일 시작 날짜를 구하고 혹시 1일보다 더 뒤로 가게 된다면 전월의 날짜수를 기준으로 계산합니다.
    예를 들면 1 3 Saturday를 입력할 경우
    dIndex가 6, dOm이 3으로 -3이 되고
    1보다 작기때문에 12월의 날짜수인 31에서 -3을 뺀 28이 일요일 날짜가 됩니다.
    마찬가지로 해당 월의 날짜수를 넘어간 경우 1부터 다시 증가하게 됩니다.
    문제가 될만한 1 3 Saturdat와 12 28 Monday를 시도해 보았으나 정상적으로 출력되는것을 확인하였습니다.

    아래는 소스코드입니다.

    #include <stdio.h>
    #include <string.h>
    int DAY_OF_MONTH[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    char DAY[7][15] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };
    int n, month, dayOfMonth;
    char day[15];
    void drawCal(int m, int dOm, char *d) {
        int dIndex=0,cur;
        for (int a = 0;a < 7;a++) {
            if (strcmp(d, DAY[a]) == 0)
                dIndex = a;
        }
        if (dOm - dIndex < 1) {
            if (m - 1 <= 0) {
                m = 12;
            }
            else {
                m = m - 1;
            }
            cur = DAY_OF_MONTH[m - 1] + (dOm - dIndex);
        }
        else {
            cur = dOm - dIndex;
        }
        for (int a = 0;a < 7;a++) {
            if (cur > DAY_OF_MONTH[m - 1]) {
                cur = 1;
                m = m + 1;
            }
            printf("%d ", cur);
            cur++;
        }
        printf("\n");
    }
    int main(void) {
        scanf("%d", &n);
        for (int a = 0;a < n;a++) {
            scanf("%d %d %s", &month, &dayOfMonth, day);
            drawCal(month, dayOfMonth, day);
        }
    }
    

    7년 전
1개의 댓글이 있습니다.
  • Kureyo
    Kureyo

    말씀하신 입력들에 대하여 정상적인 출력이 안되는것같습니다


    7년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.