🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/150370
✏️ 풀이
function solution(today, terms, privacies) {
const termPeriodMap = terms.reduce((acc, term) => {
const [termName, period] = term.split(' ');
acc[termName] = Number(period);
return acc;
}, {});
const isExpired = (privacy) => {
const [date, term] = privacy.split(' ');
const termPeriod = termPeriodMap[term];
const expirationDate = new Date(date);
return new Date(today) >= expirationDate.setMonth(expirationDate.getMonth() + termPeriod);
};
return privacies
.map((privacy, i) => isExpired(privacy) ? i + 1 : false)
.filter(Boolean);
}
각 개인정보별로 수집 일자 + 보관 기한과 오늘 날짜를 비교하여 만료 여부를 판단하여 필터링하면 된다.
먼저 각 약관 종류별 보관 기한을 별도 map으로 만들어 놓는다. 그 다음 privacies를 순회하면서 각 개인 정보의 만료 여부를 판단한다.
이 때, 만료 여부 판단은 JavaScript의 new Date간 비교 연산자를 사용할 수 있다는 점을 활용하여 단순하게 표현할 수 있다. 수집 일자 + 보관 기한을 계산할 때에는 setMonth만 사용해서 n달 후의 날짜를 얻을 수 있고, 이와 오늘 날짜를 비교하면 된다. 여기서 setMonth에 12 이상의 수가 들어가도 자동으로 연도까지 계산이 되므로 별도로 계산하여 setYear를 할 필요가 없다.
마지막으로 각 privacy의 만료 여부를 판단하여 만료되었으면 index + 1을, 만료되지 않으면 false로 변환하고 truthy한 값만 필터링하여 반환하면 된다.
'연습장 > 프로그래머스 문제풀이' 카테고리의 다른 글
[프로그래머스 Level 1] 대충 만든 자판 - JavaScript (0) | 2024.08.04 |
---|---|
[프로그래머스 Level 2] 전화번호 목록 - JavaScript (0) | 2023.08.06 |
[프로그래머스 Level 2] 덧칠하기 - JavaScript (0) | 2023.03.03 |
[프로그래머스 Level 3] 베스트앨범 - JavaScript (0) | 2023.03.01 |
[프로그래머스 Level 2] 소수 찾기 - JavaScript (0) | 2023.02.27 |