STUDY/알고리즘

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

디리릭 2023. 9. 3. 23:33
728x90

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

 

프로그래머스

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

programmers.co.kr

 

 

function solution(today, terms, privacies) {
    var answer = [];
    const todayAsNumber = Number(today.replaceAll('.',''));
    console.log(todayAsNumber);
    const finishDates = [];
    const termMap = new Map();
    //map으로 보관기간 정리
    for(let term of terms){
        const [k,v] = term.split(' ');
        termMap.set(k,Number(v));
    }
    
    for(let privacy of privacies){
        const [startDate, concrName] = privacy.split(' ');
        finishDates.push(getEndDate(startDate, termMap.get(concrName)));
    }
    
    finishDates.forEach((d,i)=>{
        const endDateAsNumber = Number(d.replaceAll('.',''));
        console.log(endDateAsNumber);
        if(todayAsNumber - endDateAsNumber > 0){
            answer.push(i+1);
        }
    })
    return answer;
}

function getEndDate(startDate, term){
    const [year,month,day] = startDate.split('.').map(d=>Number(d));
    const result =[]; 
    
    const addResult = month + term;
    let y = Math.floor(addResult/12);
    let m = addResult- y*12;
    if(m === 0){
        m = 12;
        y -= 1;
    }
    if(day === 1){
        result[2] = '28';
        m -= 1;
    }else {
        result[2] = (day-1).toString().padStart(2,0);
    }
    result[0] = year+y;
    result[1] = m.toString().padStart(2,0);
    return result.join('.');
}
728x90