Page 86 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 86
25
26 int main(void)
27 {
28 int year, month, day; /* 년, 월, 일 */
29 int retry; /* 다시? */
30 do {
31 printf("년 : "); scanf("%d", &year);
32 printf("월 : "); scanf("%d", &month);
33 printf("일 : "); scanf("%d", &day);
34 printf("%d년의 %d일째입니다.\n", year, dayofyear(year, month, day));
35 printf("다시 할까요?(1 … 예 / 0 … 아니오) : ");
36 scanf("%d", &retry);
37 } while(retry == 1);
38
39 return 0;
40 }
예를 들어 4월 15일이면 지난 날 수는 아래의 간단한 식으로 구할 수 있습니다.
1월 날 수 + 2월 날 수 + 3월 날 수 + 15
이때 날짜를 다루는 계산에서 2월의 날 수를 조심해야 합니다. 평년의 2월 날 수는 28일이지
만 윤년의 2월 날 수는 29일입니다.
지구가 태양 둘레를 한 바퀴 도는 시간은 딱 365일이 아닙니다. 이를 조정하기 위해 4로 나누어떨어지는 해를 윤년으로
하여 1년을 366일로 한 것입니다. 하지만 이렇게 해도 여전히 정확하지 않으므로 100으로 나누어떨어지고 400으로 나누어
떨어지지 않는 해를 평년으로 합니다.
조금만 더! 윤년은 어떻게 구하나요?
결국 윤년은 4의 배수 가운데 100의 배수를 제외하고, 제외한 100의 배수 가운데 400의 배수를 다시 포
함시키면 됩니다.
86 C 알고리즘