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

이민영·2023년 4월 10일

문제

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

나의 접근 방식

해당 문제에서는 모든 달을 28일까지 있다고 가정하기때문에 날짜를 28일씩 곱해줘서 나온 일수에다가 오늘 날짜 일수를 비교해줬다.
먼저 날짜를 일수를 만드는 부분은 코드를 중복으로 사용하기에 함수를 따로 만들었다.
그리고 terms를 객체로 만든후 ({ A: 6, B: 12, C: 3 })
privacies만큼 for문을 돌면서 privacies에서 날짜와 약관종류를 split을 사용하여 따로 분리해주고
privacies 날짜는 만들어둔 함수를 이용해 일수로 변환해주고 변수 resultDate에 담아줬다.
privacies 약관종류는 hasOwnProperty를 이용하여 만들어둔 객체에 key에 약관종류가 있다면 그 값을(A-> 6달) 28일을 곱해주고 그 값을 resultDate에 더해주고 그럼 총 일수가 나오고 그 일수를 today일수랑 비교하여 인덱스 값을 answer에 담아줬다.

문제풀이

function solution(today, terms, privacies) {
    
    // 받아온 날짜를 일수로 변환해주는 함수 ex) 2022.05.19 =>	679551
    function CalculateNumberOfDays(terms){
         // 모든 달은 28일까지 있다고 가정하기에 28씩 곱해준다
        const resultDate = parseInt(terms.slice(0,4))*12*28 
                        + parseInt(terms.slice(5,7))*28 
                        + parseInt(terms.slice(8,10))
        
        return resultDate;
    }
    
    
    let answer = [];
    
    //today를 일수로 변환해준다
    const todayDate = CalculateNumberOfDays(today);
    
    //terms를 사용하기 편하게 객체로 만들어준다 ex) { A: 6, B: 12, C: 3 }
    const  expiryDate = {};
    for(let i in terms){
        const [key, value] = terms[i].split(' ');
        expiryDate[key] = parseInt(value);
    }
    
    // 약관 종류에 따라 유효기간을 더해줘 날짜 계산을 해주고, newPrivacies 배열에 담아준다
    const newPrivacies = []; 
    for(let j in privacies){
        
        //privacies에서 날짜만 가져와 date 상수에 넣어준다
        const date = privacies[j].split(' ')[0];
        //privacies에서 약관 종류만 가져와 termsType 상수에 넣어준다
        const termsType = privacies[j].split(' ')[1];
        
        //privacies 날짜를 일수로 변환해주고 변수에 담는다
        let resultDate = CalculateNumberOfDays(date);
        
        //expiryDate key에 termsType(약관종류)가 포함된다면(true 라면)
        //약관 종류의 유효기간 * 28일을 resultDate에 더해준다 
         if (expiryDate.hasOwnProperty(termsType)) { 
            resultDate += expiryDate[termsType]*28 
        }
        // newPrivacies 배열에 유효기간까지 계산한 일수에 1일씩 빼주며 담아준다
        newPrivacies.push(resultDate-1)
    }
    
    for(let k in newPrivacies){
        // 유효기간 일수보다 오늘일수가 더 크다면(유효기간이 지났다면) 인덱스를 answer 배열에 담아준다.
        if(newPrivacies[k] < todayDate) answer.push(parseInt(k)+1);
    }
    return answer;
}

느낀점

이 문제도 카카오문제라 시간이 조금 걸렸다.. 그래도 전에 풀었던 [신고 결과 받기] 보다는 수월하게 풀었던거 같다.
Date로 푸는 방법도 있지만 28일을 계산해서 푸는게 좀 더 간단한거 같아서 일수를 계산해서 풀었다. Date를 사용해서도 풀어봐야겠다!

profile
Frontend Developer

0개의 댓글