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;
}