곽로그
[프로그래머스, python] 개인정보 수집 유효기간 (+반례) 본문
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/150370
풀이
좀 더 간단하게 풀 수 있는 방법은, 날짜를 절대치로 환산해서 비교하는 방법이지만, 처음 이 문제를 풀 때는 그 풀이는 생각조차 나지 않았다. 여기서 접근하는 방법은 날짜 비교다.
처음에 접근한 방식은 (개인정보수집일자_월 + 유효기간) = x 를 기준으로 만료연도 = 개인정보수집일자_연 + x //12 , 만료월 = x%12 로 풀었다. 그런데 테스트 케이스 17번에서 계속 에러가 났다.
위 풀이에서 간과한 내용은 x = 12 가 될 때이다. 예를 들어 개인정보수집일자가 2021.06.08 이고, 유효기간이 18이라고 하자. 위의 방식으로 푼다면 6 + 18 = 24 를 기준으로 만료연도는 2021 + 24//12 = 2023, 만료월은 (6 + 18) % 12 = 0월 이 된다.
따라서 만료날짜를 구할때는, x = 12의배수 가 되는 것을 분기로 풀어야 한다.
코드
def solution(today, terms, privacies):
answer = []
today_year,today_month, today_day = map(int,today.split("."))
expire_year, expire_month, expire_day = 0,0,0
terms_dict = {}
for t in terms:
key, value = t.split()
terms_dict[key] = int(value)
for i in range(len(privacies)):
date, term = privacies[i].split()
year,month,day =map(int, date.split("."))
t_month = terms_dict[term]
if (month + t_month) % 12 != 0 :
expire_year = year + (month + t_month)//12
expire_month = (month + t_month) % 12
expire_day = day
else:
expire_year = year + (t_month) //12
expire_month = 12
expire_day = day
# 만료여부 구하기
if today_year > expire_year:
answer.append(i+1)
elif today_year == expire_year:
if today_month > expire_month:
answer.append(i+1)
elif today_month == expire_month:
if today_day >= expire_day:
answer.append(i+1)
return answer
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 level2] 괄호변환 (0) | 2021.02.09 |
---|---|
[프로그래머스, level2] 삼각 달팽이 (0) | 2021.01.17 |
[프로그래머스 level2] 다리를 지나는 트럭 (0) | 2021.01.11 |
[프로그래머스 level2] 카카오프렌즈 컬러링북 (0) | 2020.12.18 |
[프로그래머스 level2] 기능개발 (0) | 2020.12.03 |
Comments