곽로그

[프로그래머스, python] 개인정보 수집 유효기간 (+반례) 본문

알고리즘/프로그래머스

[프로그래머스, python] 개인정보 수집 유효기간 (+반례)

일도이동 2023. 5. 29. 23:13
반응형

문제

https://school.programmers.co.kr/learn/courses/30/lessons/150370

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

 좀 더 간단하게 풀 수 있는 방법은, 날짜를 절대치로 환산해서 비교하는 방법이지만, 처음 이 문제를 풀 때는 그 풀이는 생각조차 나지 않았다. 여기서 접근하는 방법은 날짜 비교다. 

 

 처음에 접근한 방식은 (개인정보수집일자_월 + 유효기간) = 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

 

반응형
Comments