function solution(today, terms, privacies) {
const term = {};
terms.forEach((v) => {
const [a, b] = v.split(" ");
term[a] = parseInt(b);
});
let answer = [];
privacies.forEach((p, idx) => {
let y, m, d;
let [date, tm] = p.split(" ");
let [pYear, pMonth, pDay] = date.split(".").map((v) => parseInt(v));
y = pYear + parseInt((pMonth + term[tm]) / 12);
m = (pMonth + term[tm]) % 12;
d = pDay - 1;
if (m === 0) {
y -= 1;
m = 12;
}
if (d === 0) {
m -= 1;
d = 28;
}
let result = parseInt(
y + `${m < 10 ? "0" + m : m}` + `${d < 10 ? "0" + d : d}`
);
if (result < parseInt(today.replaceAll(".", ""))) answer.push(idx + 1);
});
return answer;
}
구현 로직
문자열로 되어있는 terms 값에 접근이 쉽도록 객체로 만들어 넣어둡니다.
privacies를 순회하면서 들어있는 날짜를 년, 달, 일로 구분해주고 년도와 달에는 term값을 더해줍니다. 년도는 12로 나눈 몫, 달은 12로 나눈 나머지로 값을 조정해주고 일은 1만 빼주면 됩니다. 달과 일이 0으로 되는 경우 이전 년도와 달로 바꾸기 위해 조건을 넣어준 후 최종 결과를 오늘 날짜와 비교하여 날짜가 지난 p의 현재 index + 1을 정답 배열에 넣습니다.