Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 특정 연도와 월의 일 수 구하는 방법

문제 개요

주어진 연도(Y)와 월(M)에 대해 해당 월의 총 일수를 반환하는 프로그램을 작성해야 합니다. 예를 들어, 연도가 1992이고 월이 7월이라면 결과는 31일이며, 연도가 2020년이고 월이 2월이라면 윤년이므로 결과는 29일이 됩니다.

해결 접근 방법

이 문제는 다음 단계를 따라 해결할 수 있습니다.

  • 월(m)이 2월인 경우:
    • 연도(y)가 윤년이면 29일을 반환하고, 그렇지 않으면 28일을 반환합니다.
  • [1, 3, 5, 7, 8, 10, 12] 요소로 구성된 리스트를 만듭니다. 이는 31일까지 있는 월들을 의미합니다.
  • m이 이 리스트에 포함되어 있으면 31을 반환하고, 그 외의 경우에는 30을 반환합니다.

윤년 판별 규칙

윤년 여부는 다음 규칙에 따라 판별합니다.

  • 연도가 400으로 나누어 떨어지면 윤년입니다.
  • 연도가 100으로 나누어 떨어지면 평년입니다.
  • 연도가 4로 나누어 떨어지면 윤년입니다.

Python 예제 코드

아래 구현 예시를 통해 더 자세히 이해해 보겠습니다.

class Solution(object):
    def numberOfDays(self, y, m):
        leap = 0
        if y % 400 == 0:
            leap = 1
        elif y % 100 == 0:
            leap = 0
        elif y % 4 == 0:
            leap = 1
        if m == 2:
            return 28 + leap
        month_list = [1, 3, 5, 7, 8, 10, 12]
        if m in month_list:
            return 31
        return 30

ob1 = Solution()
print(ob1.numberOfDays(2020, 2))

입력

2020
2

출력

29

대안: calendar 모듈 활용하기

Python 표준 라이브러리의 calendar 모듈을 사용하면 훨씬 간단하게 구현할 수 있습니다. calendar.monthrange() 함수는 해당 월의 첫날 요일과 일 수를 튜플 형태로 반환합니다.

import calendar

def numberOfDays(y, m):
    return calendar.monthrange(y, m)[1]

print(numberOfDays(2020, 2))  # 출력: 29
print(numberOfDays(1992, 7))  # 출력: 31

monthrange(year, month)는 (첫 번째 날의 요일, 해당 월의 일 수) 형태의 튜플을 반환하므로, 인덱스 [1]을 사용하면 일 수를 바로 얻을 수 있습니다. 이 방법은 윤년 계산 로직을 직접 구현할 필요가 없어 코드가 간결해지고 오류 발생 가능성도 줄어든다는 장점이 있습니다.