다음은 달력에 관한 몇 가지 일반적인 정보입니다 (필요한 경우 좀 더 연구를 해 보셔도 좋습니다).
- 1900년 1월 1일은 월요일이다.
- 4월, 6월, 9월, 11월은 30일까지 있고, 1월, 3월, 5월, 7월, 8월, 10월, 12월은 31일까지 있다.
- 2월은 28일이지만, 윤년에는 29일까지 있다.
- 윤년은 연도를 4로 나누어 떨어지는 해를 말한다. 하지만 400으로 나누어 떨어지지 않는 매 100년째는 윤년이 아니며, 400으로 나누어 떨어지면 윤년이다
Click
외부클레스로 하신분들이 많은 듯... 그렇게 하면 간단하게 구현 할 수는 있으나 문제의 취지와는 안 맞는 듯 하여 직접 count.
<script>
/* 윤년 판단. */
function isLeap(y){
return !(y%4!=0||(y%100==0&&y%400!=0));
}
/* 시작년도 부터 종료 년도까지의 각 달이 일요일로 시작하는 경우. */
function p019(sy,sm,ey,em){
//초기 날짜 설정.
var y = 1900;
var m = 1;
var w = 1;
var d = 1;
//count
var cnt = 0;
//count 시작 년도로 이동.
var dy = sy - y;
d += dy*365 + parseInt(dy/4) - parseInt((dy+300)/400);
//count 시작월로 이동.
for(;m< sm; m++){
if(m==2) //2월 28 or 29
d += (isLeap(sy))?29:28;
else if((m%2==0&&m<8)||(m%2==1&&m>8)) //30
d += 30;
else //31
d += 31;
}
//count 시작.
for(y=sy;y<=ey;y++){
for(;m<=12;m++){
if(m==2) //2월 28 or 29
d += (isLeap(y))?29:28;
else if((m%2==0&&m<8)||(m%2==1&&m>8)) //30
d += 30;
else //31
d += 31;
if((d+w)%7 == 0) //요일확인.
cnt ++;
if(y==ey && m==em)
break;
}
m=1;
}
//return
return cnt;
}
</script>
댓글 없음:
댓글 쓰기