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

Python으로 올해의 몇 번째 날인지 계산하는 방법

"YYYY-MM-DD" 형식의 날짜 문자열이 주어졌을 때, 해당 날짜가 그 해의 몇 번째 날인지 반환하는 문제입니다. 예를 들어 날짜가 "2019-02-10"이라면, 이는 2019년의 41번째 날에 해당합니다.

문제 해결 접근 방법

이 문제는 다음과 같은 단계로 해결할 수 있습니다.

  • 각 월의 일수를 담은 배열 D를 준비합니다. 예: [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  • 입력된 날짜 문자열을 하이픈(-) 기준으로 분리하여 연도, 월, 일로 변환합니다.
  • 해당 연도가 윤년이라면 2월의 일수(D[2])를 29로 늘립니다.
  • 목표 월 직전까지의 누적 일수에 일(day) 값을 더하여 최종 결과를 계산합니다.

윤년 판별 조건

윤년 여부는 다음 규칙으로 판단합니다.

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

구현 예제

다음 코드를 통해 실제 구현 과정을 살펴보겠습니다.

class Solution(object):
   def dayOfYear(self, date):
      days = [0,31,28,31,30,31,30,31,31,30,31,30,31]
      d = list(map(int,date.split("-")))
      if d[0] % 400 == 0:
         days[2]+=1
      elif d[0]%4 == 0 and d[0]%100!=0:
         days[2]+=1
      for i in range(1,len(days)):
         days[i]+=days[i-1]
      return days[d[1]-1]+d[2]
ob1 = Solution()
print(ob1.dayOfYear("2019-02-10"))

코드 동작 원리

  1. 일수 배열 초기화: 인덱스 0은 사용하지 않으며, 각 인덱스가 해당 월의 일수를 나타냅니다.
  2. 날짜 파싱: split("-")으로 문자열을 나눈 후 map(int, ...)을 통해 정수 리스트로 변환합니다.
  3. 윤년 처리: 윤년이라면 2월 일수를 28에서 29로 증가시킵니다.
  4. 누적 합 계산: 반복문을 통해 배열을 누적합 형태로 바꾸면, days[m]은 1월부터 m월 말까지의 총 일수가 됩니다.
  5. 결과 반환: 목표 월의 직전 월까지 누적 일수(days[d[1]-1])에 일(d[2])을 더하면 해당 날짜가 연중 몇 번째 날인지 구할 수 있습니다.

입력

"2019-02-10"

출력

41

2019년은 평년이므로 1월의 31일에 2월 10일을 더한 41이 정답으로 출력됩니다. 만약 입력이 "2020-02-10"이었다면 2020년은 윤년이기 때문에 결과는 42가 됩니다.