다음은 달력에 관한 몇 가지 일반적인 정보입니다 (필요한 경우 좀 더 연구를 해 보셔도 좋습니다).
- 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>
댓글 없음:
댓글 쓰기