알고리즘

[알고리즘]개인정보수집 유효기간(JS)

로돌씨 2024. 3. 12. 04:40

문제 출처 :https://school.programmers.co.kr/learn/courses/30/lessons/150370

문제설명

 

풀이

//달을 구하는 코드
const addMonth = (dateString,month) => {
    let [year,mon,day] =dateString.split('.').map((v)=> Number(v)); 
    mon += month;
    day -= 1;
    if (day === 0){
        day = 28;
        mon -= 1;
    }
    if(mon>12) {
        const monCount = Math.floor(mon/12);
        mon = mon - 12 * monCount;
        year += monCount;
    }
    if(mon === 0){
        mon += 12;
        year -= 1;
    }
    return [year, mon , day];
}
function solution(today, terms, privacies) {
    var answer = [];
    //forEach -> 배열의 밸류를 하나씩 꺼내오는 함수
    privacies.forEach((v,index) =>{
        //밸류의 띄어쓰기를 기준으로 첫번째 요소는 date / 두번째 요소는 term
        const [date , term] = v.split(" ")
        //termString에 find함수를 이용해 terms에서 innerTerm이라는 변수를할당하여 innerTerm의[0]번째가 term과 같을때에 terms를 공백기준으로 나눠 두번째 요소를 가져온다.
        const termString = Number(terms.find((innerTerm)=> {
            return (innerTerm[0] === term)
        }).split(" ")[1])
        //유효기간을 알았으니 privacies 의 달에 유효기간을 더한 후 today보다 값이 크면 약관이 만료된것임
        
        //forEach를 통해 뽑아낸 두 요소 중 첫번째 요소인 date를 addMonth의 첫번째 매개변수인 dateString으로 전달시키고 , termString을 두번째 매개변수인 month로 전달시킴
        const [eYear , eMon , eDay] = addMonth(date,termString);
        //주어진 배열과 유효기간을 더한 값을 비교하여 expired가 true일시에 answer 에 해당 ( index +1 )(약관번호)를 answer배열에 추가함
        const [year , mon , day] = today.split(".").map(v => Number(v));
        let expired = false;
        if(year > eYear){
            expired = true;
        }
        if(year === eYear && mon > eMon){
            expired = true ;
        }
        if(year === eYear && mon === eMon && day > eDay){
            expired = true ;
        }
        if(expired) { 
            answer.push(index + 1);
        }
    })
    return answer;
}

 

느낀 점🤯

forEach를 통해 매개변수를 다루는 함수를 따로 만들어 사용해 본 적이 잘 없었는데 라매개발자님의 영상을 보며 이해하려 노력했고 또 찾아보면서 아! 이게 이렇게 되어서 이런 식으로 되는구나 ... 했던게 굉장히 많았던 문제다.. 공부 또 공부 해야겠다.

라매개발자님의 문제 해설 영상에서 문제가 복잡해보이지만 , 그림을 그려서 생각을 해보면 생각보다 간단하게 풀 수 있다고 하셨고 (간단?..) 실제로 그림으로 보았을때에 문제에서 필요로 하는 것이 뭔지 , 더 간략하고 뚜렷하게 보였다! 그림 .. 메모 .. console.log 메모 ...

 

문제 해설 - 라매개발자 유튜브 :https://youtu.be/bpYlfUfLqBk?si=goc0u1G8XjanCzMZ