티스토리 뷰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | number=366 #1901년 1월 1일 count=0 JANUARY=31 FEBURARY=28 MARCH=31 APIRL=30 MAY=31 JUNE=30 JULY=31 AUGUST=31 SEPTEMBER=30 OCTOBER=31 NOVEMBER=30 DECEMBER=31 def isLeapYear(a): if(a%7==0): return True if(isLeapYear(number)): count=count+1 for year in range(1901,2001): #윤년 판정 if(year%4==0): FEBURARY=29 number=number+JANUARY if(isLeapYear(number)): count=count+1 number=number+FEBURARY if(isLeapYear(number)): count=count+1 number=number+MARCH if(isLeapYear(number)): count=count+1 number=number+APIRL if(isLeapYear(number)): count=count+1 number=number+MAY if(isLeapYear(number)): count=count+1 number=number+JUNE if(isLeapYear(number)): count=count+1 number=number+JULY if(isLeapYear(number)): count=count+1 number=number+AUGUST if(isLeapYear(number)): count=count+1 number=number+SEPTEMBER if(isLeapYear(number)): count=count+1 number=number+OCTOBER if(isLeapYear(number)): count=count+1 number=number+NOVEMBER if(isLeapYear(number)): count=count+1 number=number+DECEMBER if(isLeapYear(number)): count=count+1 FEBURARY=28 print(count) | cs |
문제에서 1900년 1월 1일이 월요일임을 알려주었기 때문에 이 날짜를 기준으로 둔다.
따라서 1901년 1월 1일은 366이다.
number를 7로 나눴을 때 나머지가 0이면 일요일인 것이다.
윤년 판정 시, 어차피 1901년부터 2000년이기 때문에
다른 조건은 무시하고 4년마다 윤년인 조건만 적용하여 판정하였다.
최초 일요일 판정은 for문 밖에서 실행되고
이후에는 for문 안에서 실행된다.
이를 처음에는 모두 for문 안에서 실행되게 하였는데
그렇게 하면 12월에서의 판정이 두 번 실행되어 올바른 값이 나오지 않았다.
'Algorithm > Project Euler' 카테고리의 다른 글
프로젝트 오일러 18번 (0) | 2017.07.03 |
---|---|
프로젝트 오일러 13번 (0) | 2017.07.03 |
프로젝트 오일러 17번 (0) | 2017.07.03 |
프로젝트 오일러 48번 (0) | 2017.07.03 |
프로젝트 오일러 42번 (0) | 2017.07.02 |
댓글