본문 바로가기

개발/이론

[Algorithm] 둠스데이 알고리즘 - 날짜, 요일, 윤년




2. 둠스데이

 

존 코웨이의 둠스데이 알고리즘


: ‘기준이 되는 둠스데이(2월 마지막 날의 요일)을 알아둔 다음, 

요일의 움직임이 7을 중심으로 순환한다는 사실과 윤년에 대한 약간의 고려를 통해서 주어진 날짜의 요일을 맞추는 것

 





ex1> 2003년의 둠스데이(윤년 아니므로228일의 요일)의 요일은 금요일이었다. 

그렇다면 2003년의 크리스마스의 요일은?

 

4/4     6/6     8/8     10/10    12/12

9/5     5/9     7/11    11/7      3/7

 

다음의 날짜들이 둠스데이의 요일과 항상 같을 수 밖에 없는 이유?

: 이 날짜들이 모두7을 중심으로 순환하기 때문에

 

: 목요일

-> 12/12 는 금요일, 12+14=26일도 금요일, 전날(12/25) 은 목요일

 

 








해가 바뀔 때에는?

: 그 해의 둠스데이를 미리 알아두면 해가 바뀌었을 때의 계산을 따로 안해도 되지만, 

모른다면 아래 리스트를 숙지해두면 편리.

1900년의 둠스데이 요일 : 수


6, 11.5, 17, 23, 28, 34, 39.5, 45, 51, 56, 62, 67.5, 73, 79, 84, 90, 95.5


이 리스트를 1900에 더한 것에 해당되는 해는 모두 둠스데이의 요일이 수요일임을 뜻함.


 

*참고*

: 리스트를 숙지해두고, 윤년인지만 판단해주면 알 수 있음.










윤년 계산

1. 해를4로 나누어 떨어지면 윤년(2월 끝에 하루가 더 붙음. 1년이366)

2. 해를100으로 나누어 떨어지고(새 세기 시작), 동시에400으로 나누어 떨어지지 않으면 윤년이 아님.

 

-> 1년이 지나면 둠스데이의 요일이 하나씩 증가

(, 윤년인 경우에만 이틀 증가)




출처. 누워서 읽는 알고리즘(임백준)

'개발 > 이론' 카테고리의 다른 글

[Algorithm] 알고리즘과 복잡도  (0) 2019.02.20
[JAVA] static  (0) 2019.02.20
[JAVA] 클래스  (0) 2019.02.20
[JAVA] 메서드, 객체  (0) 2019.02.20
[Algorithm] 팰린드롬 알고리즘 - 문자 대칭  (0) 2019.02.08