2. 둠스데이
존 코웨이의 둠스데이 알고리즘
: ‘기준’이 되는 둠스데이(2월 마지막 날의 요일)을 알아둔 다음,
요일의 움직임이 7을 중심으로 순환한다는 사실과 윤년에 대한 약간의 고려를 통해서 주어진 날짜의 요일을 맞추는 것
ex1> 2003년의 둠스데이(윤년 아니므로2월28일의 요일)의 요일은 금요일이었다.
그렇다면 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 |