윤년(閏年)은 역법을 실제 태양년에 맞추기 위해 여분의 하루 또는 월(月)을 끼우는 해이다. 태양년은 정수의 하루로 나누어 떨어지지 않고, 달의 공전주기와 지구의 공전 주기는 다르기 때문에 태양력에서는 하루(윤일), 태음태양력 (https://ko.wikipedia.org/wiki/윤년)
태양력의 윤년
현재 전 세계 대부분의 나라에서 쓰는 그레고리력은 4년에 반드시 하루씩 윤날(2월 29일)을 추가하는 율리우스력을 보완한 것으로, 태양년과의 편차를 줄이기 위해 율리우스력의 400년에서 3일(세 번의 윤년)을 뺐다.
그레고리력의 정확한 윤년 규칙은 다음과 같다.
- 서력기원연수가 4로 나누어 떨어지는 해는 윤년으로 한다. (1992년, 1996년, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년, 2032년, 2036년, 2040년...)
- 서력기원연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년, 2300년, 2500년...)
- 서력기원연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다. (2000년, 2400년...)
[ 위키 영문에서 알려주는 윤년 알고리즘 ]
if (year is not divisible by 4) then (it is a common year)
else if (year is not divisible by 100) then (it is a leap year)
else if (year is not divisible by 400) then (it is a common year)
else (it is a leap year)
다시 정리해보자면.... 이렇게 되는데
1. 연수가 4로 나누어 떨어지는 해는 윤년
2. 1의 해 중에서 100으로 나누어지는 해는 평년
3. 2의 해 중에서 400으로 나누어 지는 해는 윤년
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
|
"""
1900년부터 2200년까지의 윤년계산하기
"""
# ---------------------------------
# C 처럼 하나씩 풀기
# ---------------------------------
l = []
for k in range(1900,2201):
if(not k%4):
if(k%100):
l.append(k)
elif(not k%400):
l.append(k)
print(l)
# ---------------------------------
# if 구문 중첩 조건으로 풀기
# ---------------------------------
l2 = []
for k in range(1900,2201):
if(not k%4 and k%100 or not k%400):
l2.append(k)
print(l2)
# ---------------------------------
# 리스트 내장(List Comprehension으로 풀기
# ---------------------------------
l3 = [k for k in range(1900,2201) if(not k%4 and k%100 or not k%400)]
print(l3)
|
cs |
3가지 모두 결과는 동일하다.
[1904, 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936, 1940, 1944, 1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036, 2040, 2044, 2048, 2052, 2056, 2060, 2064, 2068, 2072, 2076, 2080, 2084, 2088, 2092, 2096, 2104, 2108, 2112, 2116, 2120, 2124, 2128, 2132, 2136, 2140, 2144, 2148, 2152, 2156, 2160, 2164, 2168, 2172, 2176, 2180, 2184, 2188, 2192, 2196]