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