[lv.1] 개인정보 수집 유효기간
[lv.1] 개인정보 수집 유효기간
📋 [ 프로그래머스 ] 시리즈 몰아보기 (17)
✏️ (lv.1) : 개인정보 수집 유효기간
고객의 약관 동의를 얻어서 수집된 개인정보 n
개가 있다. 약관의 종류는 여러개이며 각 약관별로 보관 유효기간이 정해져 있다. 모든 달은 28일까지 있다고 가정할 때 유효기간이 지난 개인정보는 파기하고자 한다.
오늘 날짜를 의미하는 문자열 today
, 약관의 유효기간을 담은 문자열 배열 terms
, 수집된 개인정보를 담은 문자열 배열privacies
가 주어질 때 파기해야할 개인정보의 번호를 오름차순으로 정수 배열에 담아 return하는 solution을 작성하라.
today
는 "YYYY
.MM
.DD
" 형태로 주어진다.- 1 <=
terms.length
<= 20terms
의 원소는 "약관 종류
유효기간
" 형태로약관 종류
와유효기간
을 공백 하나로 구분한다.약관 종류
는A
~Z
까지의 알파벳 대문자 중 하나이며 서로 중복되는 경우는 없다.유효기간
은 개인정보를 보관할 수 있는 달 수를 나타내는 정수로 1 이상 100 이하이다.
- 1 <=
privacies.length
<= 20privacies[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 <=
- 파기해야 할 개인정보가 하나 이상 존재하는 입력만 주어진다.
한달이 28일로 고정이므로 today
와 privacies
각 원소(개인정보)의 날짜를 년, 월, 일에 각 단위에 해당하는 수 * 28을 수행해 일단위로 변환한 후 terms
에 해당하는 일수를 더해 비교한다.
split()
을 이용해 년, 월, 일을 쪼개 하나의 배열로 담은 후 년 * 12 * 28 + 월 * 28 + 일 을 수행해 일단위로 변환한다.split()
을 이용해약관 종류
와유효기간
을 배열로 분리한 후reduce()
를 이용해 객체를 반환, 해당 객체의 key값으로 각 원소의약관 종류
를, value값으로유효기간
을 할당한다.privacies
를item
으로 순회하며 다음 로직을 수행한다.item
을split()
을 이용해약관 종류
와날짜
로 분리하여 배열target
에 담는다.target[0](날짜)
에today
와 같은 로직을 수행 후 그 결과값을 변수date
에 담는다.terms
에서target[1](약관 종류)
에 해당하는 key의 value값에 28을 곱해 변수validate
에 담는다.date
와validate
를 더한 값을 변수compareDate
로 초기화한다.today
가compareDate
보다 크거나 같은 경우 해당 원소의 index + 1의 값을result
에 push한다.
result
를 반환한다.
1 | function solution(today, terms, privacies) { |
2 | const result = []; |
3 | today = today.split(".").map(e => +e); |
4 | today = today[2] + today[1] * 28 + today[0] * 28 * 12; |
5 | terms = terms.reduce((acc, item) => { |
6 | let target = item.split(" "); |
7 | return { ...acc, [target[0]]: +target[1] }; |
8 | }, {}); |
9 | |
10 | privacies.forEach((item, i) => { |
11 | let target = item.split(" "); |
12 | let date = target[0].split(".").map(e => +e); |
13 | const validate = terms[target[1]] * 28; |
14 | let compareDate = date[2] + date[1] * 28 + date[0] * 28 * 12 + validate; |
15 | |
16 | if (today >= compareDate) { |
17 | result.push(i + 1); |
18 | } |
19 | }); |
20 | |
21 | return result; |
22 | } |
23 |
👨💻 관련 포스트
[lv.1] 대충 만든 자판 | 프로그래머스
[lv.1] 대충 만든 자판 | 프로그래머스
프로그래머스 lv.1 대충 만든 자판 풀이 with javascript. javascript 객체를 이용해 keymap에 존재하는 알파벳의 index를 기록하되 가장 최단거리에 해당하는 키캡의 index를 기록하여 통합된 자판을 생성하여 문제를 해결한다.
2023-05-28
[lv.1] 성격 유형 검사하기 | 프로그래머스
[lv.1] 성격 유형 검사하기 | 프로그래머스
프로그래머스 lv.1 성격 유형 검사하기 풀이 with javascript. javascript의 객체를 이용해 성격 유형(이하 MBTI)별 획득 점수를 기록하고 MBTI의 value를 비교해 문제를 해결한다.
2023-06-01
[lv.2] 주차 요금 계산 | 프로그래머스
[lv.2] 주차 요금 계산 | 프로그래머스
프로그래머스 lv.2 주차 요금 계산 풀이 with javascript. javascript의 객체를 이용해 차량의 입/출차 시간을 기록, 해당 객체를 순회하며 주차시간을 주어진 요금표에 맞게 정산하는 것으로 문제를 해결한다.
2023-06-04
💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!