개인정보 수집 유효기간
2024. 5. 27. 21:58ㆍ알고리즘/카카오
https://school.programmers.co.kr/learn/courses/30/lessons/150370
- 난이도 : Level 1
- 소요 시간 : 30분
- 실행 결과 : 통과
핵심 요구사항은 각 수집된 개인정보의 파기날짜를 구해서 오늘날짜와 비교해 파기해야하는 개인정보를 반환하는 것이다.
주의해야할 점이 있는데 하나는 유효기간의 범위이다.
예를 들어 A 약관은 12달동안 개인정보를 유지하는데 2020.05.10에 A약관을 동의했다면 유효기간의 범위는 2021.05.09까지이다.
2021.05.10이 되면 해당 정보는 파기되어야한다.
다른 하나는 날짜 계산할 때 12의 배수를 조심해야한다.
위의 사례로 이어서 설명하면 12달 동안 개인정보가 유지되므로 5 + 12 = 17이 되는데 12를 넘어가기 때문에 year을 (17 / 12)만큼 더해주고 month는 (17 % 12)의 값이 된다.
하지만 다른 약관은 19달 동안 유지된다고 하면 5 + 19 = 24인데 위의 계산방식을 적용하면 이상한 값이 나온다. 그러므로 다르게 계산해야한다. 이 경우에는 year에 (24 / 12) - 1만큼 더해주고 month는 12로 변경해야한다.
function solution(today, terms, privacies) {
const ret = [];
const [ty, tm, td] = today.split(".").map(Number);
const termsMap = new Map();
terms.forEach((elem)=>{
const [term, m] = elem.split(" ");
termsMap.set(term, Number(m));
});
privacies.forEach((privacy, idx)=>{
const [date, term] = privacy.split(" ");
const t = termsMap.get(term);
let [y, m, d] = date.split(".").map(Number);
const k = m + t;
if(k % 12 === 0){
y += (k / 12) - 1;
m = 12;
}
else {
y += Math.floor(k / 12);
m = k % 12;
}
if(ty > y) ret.push(idx + 1);
else if(ty === y && tm > m) ret.push(idx + 1);
else if(ty === y && tm === m && td >= d) ret.push(idx + 1);
});
return ret;
}
오늘날짜와 파기날짜를 비교하는 과정이 조금 까다롭게 느껴진다.이렇게 구간, 기간 정보가 나올때는 하나의 데이터로 합치는 것이 효율적이다. 시와 분이 나오면 분으로 합치는 것처럼 말이다.
function solution(today, terms, privacies) {
const ret = [];
const [ty, tm, td] = today.split(".").map(Number);
const todaySum = ty * 12 * 28 + tm * 28 + td;
const termsMap = new Map();
terms.forEach((elem)=>{
const [term, m] = elem.split(" ");
termsMap.set(term, Number(m));
});
privacies.forEach((privacy, idx)=>{
const [date, term] = privacy.split(" ");
const t = termsMap.get(term);
let [y, m, d] = date.split(".").map(Number);
const deleteDateSum = y * 12 * 28 + m * 28 + d + t * 28;
if(todaySum >= deleteDateSum) ret.push(idx + 1);
});
return ret;
}
'알고리즘 > 카카오' 카테고리의 다른 글
주차 요금 계산 (0) | 2024.05.29 |
---|---|
양궁 대회 (0) | 2024.05.29 |
두 큐 합 같게 만들기 (0) | 2024.05.28 |
이모티콘 할인행사 (0) | 2024.05.28 |
가장 많이 받은 선물 (0) | 2024.05.27 |