문제 출처 : [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;
}