- 구해야 하는 것 : 오늘 날짜로 파기해야 할 개인정보 번호들
예를 들어, A라는 약관의 유효기간이 12 달이고, 2021년 1월 5일에 수집된 개인정보가 A약관으로 수집되었다면 해당 개인정보는 2022년 1월 4일까지 보관 가능하며 2022년 1월 5일부터 파기해야 할 개인정보이다.
유효기간이 끝난 다음날. 즉, 파기를 해도 되는 가장 빠른 날짜를 파기시작일이라 정의하면, 2022년 1월 5일이 파기시작일이다.
따라서 파기시작일이 현재날짜와 같거나 더 이전의 날짜이면 파기해야 한다.
terms 를 딕셔너리 약관종류: 유효기간 로 바꾼다.privacies을 하나씩 순회하며 파기시작일을 계산한다.파기시작일 <= 현재날짜 이면 최종결과배열에 개인정보번호를 추가한다.파기시작일과 현재날짜는 YYYYMMDD형태의 정수로 비교한다. (2024년 5월 3일의 경우 정수 20240503로 표현)
처음에는 년, 월, 일을 나누어 비교하는 방법을 생각하였으나 YYYYMMDD로 정수의 형태로 비교해도 결과는 같으므로 더 간단한 후자의 방법을 선택하였다.
terms를 딕셔너리로 변환# BEFORE
["A 6", "B 12", "C 3"]
# AFTER
{"A": 6, "B": 12, "C":3}
개인정보 날짜를 년 y, 월 m, 일 d 로 분리한 후, 유효기간 달 수(term)를 더하여 계산한다.
m += term
if m > 12:
y += m // 12
m = m % 12
if m==0:
m = 12
y -= 1
m % 12 == 0 이되는 경우는 따로 처리해주어야 한다.
예를 들어, 개인정보 날짜가 2019년 12월 1일이고 유효기간이 12개월이라 하면 파기시작일은 2020년 12월 1일이다.
하지만 따로 처리해주지 않는다면 아래의 계산대로 2021년 0월이 된다.
m + term = 12 + 12 = 24y = 2019 + 2 = 2021m = m % 12 = 24 % 12 = 0YYYYMMDD 형태로 변환하고 비교하기파기시작일과 현재날짜를 정수로 비교하기 위해 YYYYMMDD형태로 만들고 <= 연산자로 비교한다.
MM과 DD가 한 자릿수인경우 0을 붙여 두자리로 만들어주어야 한다.
# 한 자릿수인경우 두 자릿수로 만들어주는 함수
def makeDoubleDigit(x):
x = int(x)
if x < 10:
x = "0" + str(x)
return str(x)
def solution(today, terms, privacies):
result = []
# terms -> 딕셔너리로 변환
termsDic = {}
for term in terms:
a, b = term.split(" ")
termsDic[a] = int(b)
today = "".join(today.split("."))
for idx, privacy in enumerate(privacies):
date, term = privacy.split(" ")
term = termsDic[term]
y, m, d = map(int, date.split("."))
# 파기일 계산
m += term
if m > 12:
y += m // 12
m = m % 12
if m==0:
m = 12
y -= 1
date = "".join(map(makeDoubleDigit, [y, m, d]))
# 현재날짜와 파기시작일 비교
if (int(today) >= int(date)):
result.append(idx+1)
return result