[programmers] 개인정보 수집 유효기간

Gomao·2023년 2월 13일
0

코딩테스트 준비

목록 보기
2/20

문제 출처 : [programmers] 개인정보 수집 유효기간

function solution(today, terms, privacies) {
    var answer = [];
    today = today.split(".").join().replace(/,/g,"");
    var duedate = {};
    for(i=0; i<terms.length; i++){
        duedate[terms[i].split(" ")[0]] = parseInt(terms[i].split(" ")[1]);
    }
    // duedate 객체를 생성. 약관 종류별 유효기관을 입력한다.
    
    var userdata_1; //수집 일자를 담을 자료
    var userdata_2 = 0; //유효 기간을 담을 자료
    var due_year = 0, due_month = 0, due_day = 0; //계산용 변수.. 식 길어지는것 방지.
    var due = []; //개인정보 만료일자를 담을 배열
    for(i=0; i<privacies.length; i++){
        
        userdata_1 = privacies[i].split(" ")[0].split("."); //개인정보 수집 일자를 [yyyy, mm, dd] 형태로 저장
        userdata_2 = parseInt(duedate[privacies[i].split(" ")[1]]) //유효 기간을 duedate 객체에서 가져옴
        due_day = userdata_1[2]; //모든 달은 28일까지이므로 날짜는 변하지 않을 것
        due_month = parseInt(userdata_1[1]) + userdata_2; //month 계산을 하기 위해 더함
        if(due_month > 12){
            if(due_month % 12 !== 0){
                due_month = (due_month % 12).toString();
                due_year = (parseInt(userdata_1[0]) + Math.floor((parseInt(userdata_1[1]) + userdata_2) / 12)).toString();
            //12를 초과할 경우, 12로 나눈 나머지를 month에 저장, 12로 나눈 몫을 year에 더해준다.
            }
            else{
                due_month = 12
                due_month = due_month.toString();
                due_year = (parseInt(userdata_1[0]) + Math.floor((parseInt(userdata_1[1]) + userdata_2) / 12) - 1).toString();
            //단, due_month 가 12의 배수일 경우(ex. 24,36,...) 1을 빼야 함!!!
            }

        }
        else{
            due_month = due_month.toString();
            due_year = (parseInt(userdata_1[0])).toString();
            //그렇지 않으면 month, year은 그대로 간다.
        }
        
        
        if(due_month < 10){
            due_month = "0" + due_month
            //만약 month가 10 미만일 경우, 0x로 출력하기 위해 앞에 0을 붙여준다.
        }
                        
        
        due.push(due_year + due_month + due_day);
        //due 배열에 yyyymmdd 형태의 문자열로 각 개인정보의 만료일자를 push한다.
    }
    //여기까지 각 개인정보의 만료일자를 due 배열에 저장하였음.
    
    
    for(i=0; i<due.length; i++){
        if(today - due[i] >= 0){
            // today가 due에 저장된 만료일자를 이미 지난 경우 폐기 대상임.
            answer.push(i+1);
            // 그렇다면 i+1번째 개인정보를 폐기대상 개인정보로 answer에 push한다.
        }
    }
    

    
    return answer;
}
profile
코딩꿈나무 고마오

0개의 댓글