✅point
ex) 12월 20일일 때
한 해의 지난 날수 계산 : 20일 + 1~11월까지 각 달의 날 수
🔺이때 평년은 2월이 28일, 윤년은 29일이다.
(*윤년: 4의 배수 가운데 100의 배수 제외하고, 다시 400의 배수 포함시킨 해)
➡️따라서 2차원 배열을 사용해 평년일 때를 행[0], 윤년일 때를 행[1]로 해서 각 달의 날 수를 저장한다.
==> 2월을 특별히 다루지 않고 날 수 계산 가능
✅윤년
✅실습2-12--지난 날 수 구하기
#include <stdio.h>
/*각 달의 날 수 저장한 이차원 배열*/
int mdays[][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, //평년(2월 28일)
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} //윤년(2월 29일)
};
/*윤년인지 판별하는 함수*/
int isleap(int year)
{
return year%4 == 0 && year%100 != 0 || year%400 == 0; //윤년일 조건.(윤년이면 1, 평년이면 0)
}
/*y년 m월 d일의 그 해 지난 날 수 계산*/
int dayofyear(int y, int m, int d)
{
int i;
int days = d; //날 수
for(i=0; i<m; i++) //0~m-1월까지의 날 수 더하기
{
days += mdays[isleap(y)][i-1]; //-1해줘야 해당 월 날 수에 접근 가능
}
return days;
}
int main(void) {
int year, month, day;
int retry;
do {
printf("년: "); scanf("%d", &year);
printf("월: "); scanf("%d", &month);
printf("일: "); scanf("%d", &day);
printf("%d년의 %d일째입니다.\n", year, dayofyear(year, month, day));
printf("다시?(1'''y/0'''n)");
scanf("%d", &retry);
} while(retry==1);
return 0;
}
출력 결과>>
'Do it 알고리즘 입문[C]' 카테고리의 다른 글
헤더파일에 #ifndef (0) | 2022.01.21 |
---|---|
구조체와 구조체의 배열 (0) | 2022.01.20 |
[백준 C언어] 2512: 예산 (0) | 2022.01.19 |
소수 찾기 (0) | 2022.01.18 |
배열 연습문제 Q5-Q10 (0) | 2022.01.17 |