Completion over Perfection

프로그래머스 - 개인정보 수집 유효기간 (파이썬3 Python3) 본문

파이썬 (Python)

프로그래머스 - 개인정보 수집 유효기간 (파이썬3 Python3)

난차차 2023. 9. 1. 11:03
반응형

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

문제가 복잡하게 설명은 되어 있는데 결국 구현해야하는 것은 날짜를 비교하는 로직입니다. 

오늘날짜(코드에서 todayYY, todayMM, todayDD로 선언한 변수들)와 약관에 동의한 날짜 + 유효기간(이하 약관기간)

비교하여 날짜가 같거나 지났으면 파기해야하므로 answer 배열에 넣어줍니다. 

그게 아니라면 pass 시켜주면 되고요.  

 

날짜 비교하는 로직은 

먼저 년도를 비교해서 오늘의 날짜가 약관기간보다 큰지를 봅니다. 

 

크다면 이미 파기했어야 하는 개인정보이므로 바로 파기하면 됩니다. (정답 배열에 추가해주고 끝)

만약 작다면 기간이 남은거니 패스시키고 년도가 같다면 월을 비교해야겠죠. 

 

월을 비교해서 오늘의 월이 약관기간보다 크다면 이것도 파기되어야 하므로 정답 배열에 넣어줍니다.

월이 같다면 일을 비교해야 합니다. 

 

일을 비교해서 만약 오늘 날짜와 약관기간이 같거나 크다면 이것도 파기대상입니다. 정답 배열에 추가해줍니다.

아니라면 파기대상이 아니므로 패스시킵니다. 

 

 

def solution(today, terms, privacies):
    answer = []
    termsDict = {}
    for term in terms:
        termsDict[term.split(' ')[0]] = term.split(' ')[1]
    cnt = 1
    for date in privacies:
        # print(date)
        yy =int(date.split(' ')[0].split('.')[0])
        mm = int(date.split(' ')[0].split('.')[1])
        dd = int(date.split(' ')[0].split('.')[2])
        term = date.split(' ')[1]
        termLength = int(termsDict[term])
        # 약관동의한 날짜로부터 termLength일 후의 날짜
        calculatedDate = dd + (termLength*28)
        # print(calculatedDate) 
        while True:
            if calculatedDate > 28:
                calculatedDate -= 28
                mm += 1
            if mm > 12:
                mm -= 12
                yy += 1
            if calculatedDate <= 28:
                break
        # print(cnt, yy, mm, calculatedDate)

        # 약관 동의한 날짜 + 약관 기간
        # yy = 2021 
        # mm = 11 
        # dd = 2

        # 오늘 날짜와 비교
        todayYY = int(today.split('.')[0]) # 2022
        todayMM = int(today.split('.')[1]) # 05
        todayDD = int(today.split('.')[2]) # 19

        if todayYY > yy:
            answer.append(cnt)
        elif todayYY == yy: # 비교 연도가 같다면 월을 비교한다
            if todayMM > mm: 
                answer.append(cnt)
            elif todayMM == mm: # 비교 월이 같다면 일을 비교한다
                if todayDD > calculatedDate:
                    answer.append(cnt)
                elif todayDD == calculatedDate:
                    answer.append(cnt)
        cnt+=1

    # print(answer)

    return answer

 

 

반응형
Comments