IT/알고리즘
[python/알고리즘] 날짜 계산하기
유달잇
2021. 5. 11. 16:34
728x90
Q. 2021-5-10부터 1000일 후의 날짜는?
A.
1. python 코드를 함수화하여 구현
year = 2021
month = 5
day = 10
n = 1000
# 윤년, 그레고리력 근거하여 구함
def leapyear(y):
# 4의 배수이며 100의 배수가 아닐 때 and 400의 배수일 때
if ((y%4 == 0 and y%100 !=0) or y % 400 == 0):
return True
else:
return False
def invalidDay(y,m,d):
num = 31
if m in [4,6,9,11]: # 4,6,9,11월은 30일
num = 30
if m == 2: # 2월은 윤년 판별에 따라 29일 28일로 나눈다.
if leapyear(year):
num = 29
else:
num = 28
if d > num :
return True
else:
return False
for _ in range(n):
day += 1
if (invalidDay(year, month, day)):
day = 1
month += 1
if (month > 12):
month = 1
year += 1
print(year, month, day)
-> 1. 일(day)에 숫자를 더했을때 invaliDay( )에서 달(month)를 증가할지 판별한다.
2. 달(month)이 12가 넘으면 년(year)을 +1하고 달(month)을 초기화한다.
2. python datetime 모듈을 활용하여 구현
import datetime
year, month, day, n = 2021, 5, 10, 1000
day = datetime.date(year, month, day)
theday = day + datetime.timedelta(n)
print(theday)
print('\n')
-> datetime의 timedelta를 사용하여 1000일 후의 날짜를 계산한다.
< 달력 만들기 >
1. 수학적으로 1일이 무슨 요일인지 알아보자.
weekdays = ['일','월','화','수','목','금','토']
def dayOfWeek(y, m, d):
t1 = y - (14-m) // 12
t2 = t1 + (t1//4) - (t1//100) + (t1//400)
t3 = m + 12 * ((14-m) //12) -2
return (d+t2+(31*t3//12)) % 7
year, month, day = 2021,5,10
res = dayOfWeek(year,month,day)
print(weekdays[res],'요일')
2. 달력 출력
def printCalendar(y,m):
m_num = daysOfMonth(y,m)
day_of_week = dayOfWeek(y,m,1)
print(y,'년',m,'월')
for day in weekdays:
print(' ', day, end=' ')
print()
for _ in range(day_of_week):
print(' ', end=' ')
for day in range(1, m_num+1):
if day<10:
print(' ', day, end=' ')
else:
print(' ', day, end=' ')
if (day_of_week + day) % 7 == 0:
print()
print()
printCalendar(2021,5)
3. 년도를 입력하면 1월부터 12월까지 달력을 출력하자.
in_year = int(input())
for i in range(1,13):
printCalendar(in_year, i)
출처 : Youtube 주니온TV 아무거나연구소의 코린아, 코딩하자! with 파이썬
728x90