코딩테스트 연습
2023 KAKAO BLIND RECRUITMENT
개인정보 수집 유효기간
개인정보 수집 유효기간이 지났는지 확인하라.
function solution(today, terms, privacies) {
var answer = [];
//obj에 약관 저장
let obj = {};
for (let elem of terms) {
let t = elem.split(" ");
obj[t[0]] = t[1] * 1;
}
let num = 0;
for (let elem of privacies) {
let p = elem.split(" ");
let month = obj[p[1]];//약관에 따른 유효기간
let [y, m, d] = p[0].split(".");//구조분해할당으로 연월일 저장
//연월일 string->number 변환
y *= 1;
m *= 1;
d *= 1;
//유효기간 계산
m += month;
d -= 1;
if (d === 0) {
d = 28;
m--;
}
if (m > 12) {
y += Math.floor((m-1) / 12);
m -= Math.floor((m-1) / 12) * 12;
}
if (d === 0 && m === 13) {
d = 28;
m = 12;
}
num++;
//2자리수 만들기
m = ("00" + m).slice(-2);
d = ("00" + d).slice(-2);
//유효기간이 지났다면 개인정보의 번호 저장
if (`${y}.${m}.${d}` < today) answer.push(num);
}
return answer;
}
solution("2019.01.01", ["B 12"], ["2017.12.21 B"]);
여러 조건문을 통해 날짜를 구하는 것보다 전체 일수를 구하여 비교하는 것이 더 안정적임. 조건에서 28일로 통일한 것이 이런 이유에서 였을까.
function solution(today, terms, privacies) {
var answer = [];
var [year, month, date] = today.split(".").map(Number);
var todates = year * 12 * 28 + month * 28 + date;
var t = {};
terms.forEach((e) => {
let [a, b] = e.split(" ");
t[a] = Number(b);
});
privacies.forEach((e, i) => {
var [day, term] = e.split(" ");
day = day.split(".").map(Number);
var dates = day[0] * 12 * 28 + day[1] * 28 + day[2] + t[term] * 28;
if (dates <= todates) answer.push(i + 1);
});
return answer;
}
let [y, m, d] = p[0].split(".");
//암묵적 형 변환
y *= 1;
m *= 1;
d *= 1;
위의 코드를 한 줄로 줄일 수 있음.
var [year, month, date] = today.split(".").map(Number);
let obj = {};
obj[color]="black";
obj.weather="cloudy";
delete obj.color;
//ES6
var x=1,y=2;
var obj={x,y};