https://school.programmers.co.kr/learn/courses/30/lessons/150370
현재 날짜, 약관종류+유효기간, 구별해야할 개인정보 이렇게 3가지 데이터가 주어지고 파기해야하는 개인정보의 번호를 출력해야하는 문제이다.
ex)
약관종류 | 유효기간 |
---|---|
A | 6 달 |
B | 12 달 |
C | 3 달 |
번호 | 개인정보 수집일자 | 약관종류 |
---|---|---|
1 | 2021.05.02 | A |
2 | 2021.07.01 | B |
3 | 2022.02.19 | C |
4 | 2022.02.20 | C |
모든 달은 28일로 가정된다고 문제에 주어져 있다.
주어진 날짜 정보를 split이나 map함수를 이용하여 나누고 이를 일로 변환하여 약관에 맞게 계산하여 분류하면 가능할 것 같다.
term자료 정보에 관한 새로운 리스트를 생성하여 약관종류를 index로 가지고 그에 따른 유효기간을 value값으로 가지게 한다.
enumerate를 이용하여 privacies 데이터를 index와 value값을 추출하여 value 값은 날짜와, 약관종류로 분리하고 약관종류에 다른 유효기간을 대입하여 주어진 today 데이터의 값과 비교하여 작거나 같은 경우에만 인덱스값에 1을 더하여 정답 리스트에 append한다.
# 연월일 날짜정보를 일(day)로 변환
def dateToday(date):
year, month, day = map(int, date.split("."))
return int((year * 12 * 28) + (month * 28) + day)
# 주어진 정보를 통한 정답 구하기
def solution(today, terms, privacies):
terms_val = dict() # 약관 종류에 따른 유효기간 저장을 위한 리스트
answer = [] # 정답 저장
#약관 정보를 리스트화
for var in terms:
a, b = var.split(' ')
b = int(b)
terms_val[a] = b
# 개인정보를 수집날짜(d)와 약관종류(V)로 분리
# d는 일로 변환하고 terms_val[v]를 통하여 유효기간 추출
for index, val in enumerate(privacies):
d, v = val.split(' ')
priv_date = dateToday(d)
priv_var_val = terms_val[v]
if priv_date + priv_var_val*28 <= dateToday(today):
answer.append(index+1)
return answer