TEST/자료구조와 함께 배우는 알고리즘 입문(C언어)
<2> Q13. 자료구조와 함께 배우는 알고리즘 입문 (C언어)
도라몬즈
2020. 6. 29. 15:55
#include<stdio.h>
typedef struct {
int y;
int m;
int n;
} Date;
Date Dateof(int y, int m, int d)
{
Date x = { y,m,d };
return x;
}
int lyear(Date x)
{
return !((x.y / 4 == 0 && x.y / 100 != 0) || x.y / 400 == 0);
}
Date After(Date x, int n)
{
int m[2][12] = {
{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}
};
while (n) {
while (n + x.n > m[lyear(x)][x.m-1]) {
n -= m[lyear(x)][x.m-1];
x.m++;
if (x.m == 13) {
x.m = 1;
x.y++;
}
}
x.n += n;
n = 0;
}
return x;
}
Date Before(Date x, int n)
{
int m[2][13] = {
{31,31,28,31,30,31,30,31,31,30,31,30,31},
{31,31,29,31,30,31,30,31,31,30,31,30,31}
};
while (n) {
while (n >= x.n) {
n -= m[lyear(x)][x.m - 1];
x.m--;
if (x.m == 0) {
x.m = 12;
x.y--;
}
}
x.n -= n;
n = 0;
}
return x;
}
int main(void)
{
Date a = Dateof(2020, 6, 29);
printf("%d %d %d\n", a.y, a.m, a.n);
a = After(a, 516);
printf("%d %d %d\n", a.y, a.m, a.n);
a = Before(a, 516);
printf("%d %d %d", a.y, a.m, a.n);
return 0;
}