Sunday, April 19, 2015

Project Euler #19 - 1일 일요일이 몇 번?

1901년부터 2000년까지 매달 1일이 일요일인 경우는 몇 번?

1. 1200번 중 몇 번인지를 물어보는 문제인데, 100년이면 충분히 긴 시간이고 중심극한정리를 생각하면 정답은 1200/7 = 171.xx 근처에 있을 거다.

2. 1번으로 풀면 cheating인 듯 하고.. 이런 코드를 짜 봤다. 매달 1일이 무슨 요일인지 다 찾아보는 방법이다.
d = 2 #Monday - 1 Jan 1901
c = 0
for year in range(1901,2001):
    for mon in range(1,13):
        if d == 0: c += 1
        if mon in (1,3,5,7,8,10,12): d = (d + 3) % 7
        elif mon in (4,6,9,11): d = (d + 2) % 7
        elif year % 4 == 0: d = (d + 1) % 7

print c

3. 포럼에서 본 글 중 인상적인 것.
(일단, 윤년이 아닌 경우)
1월 1일이 일요일인 경우 그 해에 1일이 일요일은 몇 번?
1월 1일이 월요일인 경우 그 해에 1일이 일요일은 몇 번?
1월 1일이 화요일인 경우 그 해에 1일이 일요일은 몇 번?
...
1월 1일이 토요일인 경우 그 해에 1일이 일요일은 몇 번?

이걸 미리 찾아두고, 100년 동안 1월 1일이 일요일이었던 횟수, 월요일이었던 횟수, ... 를 세어 본다. 2번에서는 y*m번의 요일 계산이 필요했지만 3번은 y+m번의 요일 계산이면 충분하다.

No comments: