[프로그래머스] 개인정보 수집 유효기간
사용 언어: Python3
문제
풀이
나의 풀이
def solution(today, terms, privacies):
today_yy, today_mm, today_dd = map(int, today.split('.'))
terms_dic = {}
for term in terms:
a, b = term.split()
terms_dic[a] = int(b)
res = []
for idx, privacy in enumerate(privacies):
collect_start, rule = privacy.split()
start_yy, start_mm, start_dd = map(int, collect_start.split('.'))
start_mm += terms_dic[rule] # 수집일자 + 약관 유효기간
if start_mm > 12:
start_yy += start_mm // 12
start_mm %= 12
start_dd -= 1 # 하루 빼야함
if start_dd == 0:
start_dd = 28
start_mm -= 1
if start_mm == 0:
start_mm = 12
start_yy -= 1
# today와 날짜 비교 -> 파기해야할 것 res에 담기
# today가 start 보다 크면 파기
if today_yy > start_yy:
res.append(idx+1)
elif today_yy < start_yy:
pass
else: # 년이 같으면 달 비교
if today_mm > start_mm:
res.append(idx+1)
elif today_mm < start_mm:
pass
else: # 월도 같으면 일 비교
if today_dd > start_dd:
res.append(idx+1)
elif today_dd < start_dd:
pass
else: # 일까지 같으면 아직 보관 가능
pass
return res
- 테스트 케이스: 통과
- 제출 결과: 실패
다른 풀이
def solution(today, terms, privacies):
def dateToDay(date):
yy, mm, dd = map(int, date.split("."))
return (yy * 12 * 28) + (mm * 28) + dd
terms_dic = {}
for term in terms:
a, b = term.split()
terms_dic[a] = int(b)
today_date = dateToDay(today) # 오늘 날짜
res = [] # 파기할 개인정보
for idx, privacy in enumerate(privacies):
collect_start, rule = privacy.split() # 개인정보 수집일자, 약관 종류
start_date = dateToDay(collect_start) # 수집일자
start_date += terms_dic[rule] * 28 - 1 # 보관 가능 날짜 (= 수집일자 + 약관 유효기간 - 1)
# today와 날짜 비교 -> 파기해야할 것 res에 담기
# today가 start 보다 크면 파기
if today_date > start_date:
res.append(idx + 1)
return res
- 테스트 케이스: 통과
- 제출 결과: 통과
년, 월, 일
->일
로 변환 🌟- 날짜를 정확하고 간단하게 비교할 수 있다!
💛 개인 공부 기록용 블로그입니다. 👻