공부블로그

프로그래머스 - [ 개인정보 수집 유효기간 ] 본문

공부하기

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

떠어영 2023. 4. 18. 21:52

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

오랜만에 알고리즘*^^*

 

테스트케이스 19번에서 걸렸는데 찾아보니까 유효기간이 100달일때를 고려해야했다!

function solution(today, terms, privacies) {
    var answer = [];
    
    let arr_terms = {}
    terms.forEach(term => {
           if(term.length >= 5){ //유효기간이 100인 경우 
                arr_terms[term[0]] = parseInt(term.slice(-3))                    
           }else{
                arr_terms[term[0]] = parseInt(term.slice(-2))                    
           }
        }
    )
    //현재 날짜 환산
    var today_sum = parseInt(today.slice(0,4))*12*28 + parseInt(today.slice(5,7))*28 + parseInt(today.slice(8,10))
    
    privacies.forEach((priv, idx) => 
    { 
        var y = parseInt(priv.slice(0,4) )
        var m = parseInt(priv.slice(5,7))
        var d = parseInt(priv.slice(8,10))
        
        //해당 사용자정보의 유효기간
        var limit = arr_terms[priv.slice(-1)]
        var add_y = 0
        var add_m = 0
        
        var limit_y = 0
        var limit_m = 0
        
        //유효기간이 1년 이상일 때
        if(limit > 12){
            add_y = Math.floor(limit/12)
            add_m = limit%12
        }else{
            add_m = limit
        }  
        //유효기간의 달 수를 더했는데 해가 넘어가는 경우
        if(m + add_m > 12){
            add_y += 1
            limit_m = m + add_m - 12
        }
        else{
            limit_m = m + add_m
        }
        limit_y = y + add_y
        //현재 날짜에서 유효기간만큼 더한 날짜 : limit
        //유효기간만큼 더한 날짜를 환산한 값이 현재날짜를 환산한 값보다 작거나 같으면 파기!
        if((limit_y*28*12 + limit_m*28 +d) <= today_sum){
                answer.push(idx+1)
            }
    })
    return answer;
}