[LeetCode] 1360. Number of Days Between Two Dates

Chobby·2025년 8월 12일
1

LeetCode

목록 보기
506/582

😎풀이

  1. 윤년을 계산하는 헬퍼 함수를 만든다.
    1-1. 윤년은 4로 나누어 떨어지면서, 100으로 나누어 떨어지지 않는 해를 의미한다.
    1-2. 윤년은 400으로 나누어 떨어지는 해를 의미한다.
  2. 1971년부터 현재까지의 날짜를 세는 헬퍼 함수를 만든다.
    2-1. YYYY-mm-DD 형식을 입력받아 숫자형으로 변환한다.
    2-2. 1971년부터 작년까지 윤년이라면 366일, 아니라면 365일을 더한다.
    2-3. 올 해의 지나온 달의 일수를 추가한다. 윤년일 경우 2월은 하루를 더 더 한다.
    2-4. 해당 날짜의 일 수를 반환한다.
  3. 두 날짜의 일 수의 차이를 반환한다.
const DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

function daysBetweenDates(date1: string, date2: string): number {
    return Math.abs(countDays(date1) - countDays(date2))
}

function countDays(date: string) {
    const [year, month, day] = date.split('-').map(Number)
    let days = 0
    
    for(let curYear = 1971; curYear < year; curYear++) {
        days += 365
        if(isLeapYear(curYear)) days++
    }
    
    for(let curMonth = 1; curMonth < month; curMonth++) {
        days += DAYS[curMonth - 1]
        if(curMonth === 2 && isLeapYear(year)) days++
    }
    
    days += day
    return days
}

function isLeapYear(year: number) {
    if(year % 4 === 0 && year % 100 !== 0) return true
    if(year % 400 === 0) return true
    return false
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글