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
댓글
250x250
최근에 올라온 글
«   2024/10   »
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
Total
Today
Yesterday