- 구해야 하는 것 : 오늘 날짜로 파기해야 할 개인정보 번호들
예를 들어, 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