문제 개요
주어진 연도(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]을 사용하면 일 수를 바로 얻을 수 있습니다. 이 방법은 윤년 계산 로직을 직접 구현할 필요가 없어 코드가 간결해지고 오류 발생 가능성도 줄어든다는 장점이 있습니다.