프로그래머스) 개인정보수집 유효기간

Clear·2023년 3월 29일
0

출처

https://school.programmers.co.kr/learn/courses/30/lessons/150370

풀이

const dateValidator = (y,m,d, term)=>{
    y += Math.floor(term/12)
    m += term%12
    d -= 1
    
    if (m>12){
        y += Math.floor(m/12)
        m %= 12
    }
    
    if (d===0){
        d = 28
        m -= 1
        if (m===0){
            m = 12
            y -= 1
        }
    }

    return [y,m,d]
}


function solution(today, terms, privacies) {
    var answer = [];
    const parsedToday = today.split('.').map(ele=>parseInt(ele))
    
    const obj = {}
    for (term of terms){
        const [type, period] = term.split(' ');
        obj[type] = parseInt(period)
    }
    // console.log(obj)
    
    privacies.forEach((data,idx)=>{
        
        const [date, term] = data.split(' ');
        let [y,m,d] = date.split('.').map(ele=>parseInt(ele))
        
        const [year, month, day] = dateValidator(y,m,d,obj[term])
        console.log(year, month, day)
        const [compY, compM, compD] = parsedToday
        // console.log(compY, compM, compD)
        
        if (year>compY) return
        if (year===compY && month>compM) return
        if (year===compY && month===compM && day>=compD) return
        
        answer.push(idx+1)
    })
    return answer;
}

깨달은 것

  • forEach에는 continue가 아니라 return을 사용해 다음 순회로 넘길 수 있다.
  • 그냥 연월일을 전부 일로 합쳐서 대소비교를 하는 방법이 있었다.
    시간이든 날짜든 전부 최소단위로 합쳐서 한번에 비교하자.

0개의 댓글