You are given the following information, but you may prefer to do some research for yourself.

  • 1 Jan 1900 was a Monday.
  • Thirty days has September,
    April, June and November.
    All the rest have thirty-one,
    Saving February alone,
    Which has twenty-eight, rain or shine.
    And on leap years, twenty-nine.
  • A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.

How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?

 

다음의 정보가 제공되어 있는데, 당신은 직접 연구해 보는 것을 더 선호할 것 같다.

  • 1900년 1월 1일은 월요일이다.
  • 9월, 4월, 6월, 11월에는 30일까지 있다.
    나머지 달에는 31일까지 있다.
    2월은 예외로 하는데, 항상 28일까지 있고, 윤년에는 29일까지 있다.
  • 윤년은 4년 마다 발생하는데, 100년은 아니며, 400으로 나눠지는 해는 윤년이다.

20세기(1901년 1월 1일~2000년 12월 31일) 첫 달에는 일요일이 며칠이나 있는가?

--------------------------------------------------------------------------

 

늘 접하기 때문에 쉽게 생각하던 달력을 프로그램으로 만들려면 얼마나 많은 부분을 고려해야 하는지 몸으로 느끼게 만들어주는 문제이다. 복잡한 알고리즘을 새로 고안할 필요는 없지만, 예외사항 처리에 대한 섬세함이 요구된다.

 

매 해 1월 1일이 무슨 요일인지 계산하고(그 해의 날짜수(365 또는 366일)를 7로 나누는 방식), 해당 요일이 1월 1일인 경우 31일까지 일요일이 몇 번 있는지 계산하는 것을 100년 동안 반복하면 된다.

 

처음에 문제를 잘 못 이해해서 전체 일요일 갯수를 계산하였고(그것도 매 달 계산하는 방법으로), 덕분에 문제해결에 더 많은 시간이 들었다.

 

 

+ Recent posts