문제
2023 KAKAO BLIND RECRUITMENT - 개인정보 수집 유효기간
문제 설명
고객의 약관 동의를 얻어서 수집된 1~n번으로 분류되는 개인정보 n개가 있습니다. 약관 종류는 여러 가지 있으며 각 약관마다 개인정보 보관 유효기간이 정해져 있습니다. 당신은 각 개인정보가 어떤 약관으로 수집됐는지 알고 있습니다. 수집된 개인정보는 유효기간 전까지만 보관 가능하며, 유효기간이 지났다면 반드시 파기해야 합니다.
오늘 날짜를 의미하는 문자열 today
, 약관의 유효기간을 담은 1차원 문자열 배열 terms
와 수집된 개인정보의 정보를 담은 1차원 문자열 배열 privacies
가 매개변수로 주어집니다. 이때 파기해야 할 개인정보의 번호를 오름차순으로 1차원 정수 배열에 담아 return 하도록 solution 함수를 완성해 주세요.
제한사항
today
는 "YYYY
.MM
.DD
" 형태로 오늘 날짜를 나타냅니다.- 1 ≤
terms
의 길이 ≤ 20terms
의 원소는 "약관 종류
유효기간
" 형태의약관 종류
와유효기간
을 공백 하나로 구분한 문자열입니다.약관 종류
는A
~Z
중 알파벳 대문자 하나이며,terms
배열에서약관 종류
는 중복되지 않습니다.유효기간
은 개인정보를 보관할 수 있는 달 수를 나타내는 정수이며, 1 이상 100 이하입니다.
- 1 ≤
privacies
의 길이 ≤ 100privacies[i]
는i+1
번 개인정보의 수집 일자와 약관 종류를 나타냅니다.privacies
의 원소는 "날짜
약관 종류
" 형태의날짜
와약관 종류
를 공백 하나로 구분한 문자열입니다.날짜
는 "YYYY
.MM
.DD
" 형태의 개인정보가 수집된 날짜를 나타내며,today
이전의 날짜만 주어집니다.privacies
의약관 종류
는 항상terms
에 나타난약관 종류
만 주어집니다.
today
와privacies
에 등장하는날짜
의YYYY
는 연도,MM
은 월,DD
는 일을 나타내며 점(.
) 하나로 구분되어 있습니다.- 2000 ≤
YYYY
≤ 2022 - 1 ≤
MM
≤ 12 MM
이 한 자릿수인 경우 앞에 0이 붙습니다.- 1 ≤
DD
≤ 28 DD
가 한 자릿수인 경우 앞에 0이 붙습니다.
- 2000 ≤
- 파기해야 할 개인정보가 하나 이상 존재하는 입력만 주어집니다.
입출력 예
today | terms | privacies | result |
---|---|---|---|
"2022.05.19" | ["A 6", "B 12", "C 3"] | ["2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"] | [1, 3] |
"2020.01.01" | ["Z 3", "D 5"] | ["2019.01.01 D", "2019.11.15 Z", "2019.08.02 D", "2019.07.01 D", "2018.12.28 Z"] | [1, 4, 5] |
코드
function checkvalidity(today, date, validity) {let [y1, m1, d1] = today.split('.').map(number),[y2, m2, d2] = date.split('.').map(number);return ((y1 - y2) * 12 + (m1 - m2)) * 28 + (d1 - d2) >= validity * 28;}function solution(today, terms, privacies) {const answer = [];const map = new map();for (let t of terms) {let [kind, validity] = t.split(' ');map.set(kind, +validity);}privacies.foreach((val, idx) => {let [date, kind] = val.split(' ');if (checkvalidity(today, date, map.get(kind))) answer.push(idx + 1);});return answer;}
이전 포스트
[프로그래머스] 마법의 엘리베이터 (JavaScript)
다음 포스트
[프로그래머스] 이모티콘 할인행사 (JavaScript)