원당이는 자신이 태어난 날짜 2004 년 1월 14일 입니다.
오늘 날짜 2022년 10월 22일까지 원당이는 자신이 몇일을 살았는지 무척 궁금합니다.
네이버에서 날짜 계산기 프로그램이 있지만 원당이는 굳이 계산기 프로그램은 사용하고 싶지 않습니다.
여기서 윤년은 2월이 29일이고 평년은 2월이 28일 입니다.
윤년의 규칙은 연도가 400의 배수이거나 4의 배수이고 100의 배수가 아닌 연도가 윤년이며 그 외의 년도는 평년입니다.
여러분이 원당이에게 어떻게 해결을 할 수 있는 지 알려 주세요.
문제풀이
프로그램의 원리로 설명을 하면 다음과 같습니다.
0년 0월 0일 부터 2022년 10월 22일 까지의 날짜를 계산 후 0년 0월 0일 부터 태어나기 전인 2004년 1월 13일 까지의 날짜를 계산해서 빼 주면 됩니다.
2022년 10월 22일 까지의 날짜를 계산해 보겠습니다.
2021년 12월 31일까지의 날짜는 365 * 2021 + 윤년의 날짜 수 입니다.
여기서 윤년의 날짜 수는 400의 배수가 2021 / 400 = 5회, 100의 배수가 2021 /100 = 20회, 4의 배수가 2021/4 = 505 회 입니다.
따라서 505 - 20 + 5 = 490 회 입니다.
2021년 12월 31일까지의 날짜는 738,155 일 입니다.
2022년 1월 1일 부터 10월 22일 까지는 2022년은 평년이므로 1월(31) + 2월(28) + 3월(31) + 4월 (30) + 5월(31) + 6월(30) + 7월(31) + 8월(31) + 9월(30) + 22일 과 같이 계산 하거나 혹은 365 - 12월(31) - 11월(30) - 10월(9) 와 같이 계산을 하면 295일 입니다.
즉 2022년 10월 22일 까지의 날짜는 738,155 + 295 = 738,450 일 입니다.
다음으로 2004년 1월 13일 까지의 날짜를 계산합니다.
2003년 12월 31일 까지는 365 * 2003 + 윤년의 날짜이므로
윤년의 날짜는 400의 배수: 2003/400=5회,100의 배수 2003/100=20,4의 배수 2003/4=500 이므로 500 - 20 + 5 = 485회입니다.
따라서 365*2003 + 485 = 731,580 일 입니다.
다음으로 2004년 1월 1일 부터 1월 13일까지의 날짜는 13일이므로 0년 0월 0일 부터 2004년 1월 13일 까지는 731,580 + 13 = 731,593 일 입니다.
두 날짜 사이의 차이는 738,450 - 731,593 = 6,857 일입니다.
따라서 원당이는 태어나서 2022년 10월 22일 까지 총 6857일째 살고 있습니다.
프로그램을 구현하다 보면 이렇게 두 날짜 사이의 기간을 구해야 하는 경우가 종종 발생 합니다.
물론 각 언어마다 이러한 날짜 사이의 기간을 구하는 함수가 존재 하기 때문에 해당 함수에 매개변수로 두 날짜만 입력하면 금방 계산이 됩니다.
하지만 이러한 원리를 이해하고 있다면 해당 함수를 찾지 못했다면 직접 구현해서 사용할 수도 있을 것입니다.^^
이 문제를 해결 하면서 윤년과 평년의 원리도 이해 하시는데 도움이 되면 좋을 것 같네요.
지구가 태양의 둘레를 한바퀴 도는 기간을 1년이라고 정하고 있는데 1년은 정확히 365일이 아닙니다.
지구의 공전 주기는 다른 행성의 영향으로 해마다 약간 차이가 있지만 평균적으로 365.2422일입니다.
이 때 평년을 365일로 하게 되면 매년 원래 출발했던 위치에서 많이 부족하게 됩니다.
따라서 4년에 한번씩 366일 윤년으로 만들게 됩니다. 하지만 이때 (365*3 + 366)/4 = 365.25 가 되어 365.2422 보다 커지게 되므로 100년에 한번씩 365일 평년으로 만들고 400년에 한번씩 366일 윤년으로 만들면 400년 주기로 1년 평균 365.2425일이 됩니다.
이 오차는 대략 3300년에 1일씩 달력이 실제 태양의 운행보다 빨리 간다고 하는데요~
우리가 이 세상에 없는 시기인 3300년도에는 위의 규칙에서 약간 조정이 되겠네요.^^
오늘도 알고리즘 수학과 즐거운 시간 되셨기를 바라며~
최선을 다하는 모든 분들을 응원합니다.^^
인천 서구 원당컴퓨터학원
'강의자료 > 알고리즘 수학' 카테고리의 다른 글
[알고리즘 수학] 팬 케이크 만들기 (15) | 2023.02.28 |
---|---|
[알고리즘 수학] n일장이 함께 열리는 날짜는 언제일까요? (13) | 2023.02.16 |
[알고리즘 수학] 등수 구하기 (8) | 2022.11.03 |
[알고리즘 수학] 쇼핑몰의 등급별 할인율을 계산해 주자. (5) | 2022.10.05 |
[알고리즘 수학] 장갑 짝 찾기 (5) | 2022.09.27 |