ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개인정보 수집 유효기간(2023 KAKAO BLIND RECRUITMENT)
    코딩테스트 연습 2023. 11. 16. 11:49

    문제설명

    제한사항

    입출력 예 및 설명

     

     

    문제풀이1

    import pandas as pd
    import datetime
    
    def solution(today, terms, privacies):
        answer = []
        idx = 0
    
        dict = {}
        for t in terms:
            dict[t[0]] = t[2:]
        for priv in privacies:
            idx += 1
            
            수집일자, 약관코드 = pd.to_datetime(priv[0:10]), priv[11:]
            오늘일자 = pd.to_datetime(today)
    
            y, m, d = 수집일자.year, 수집일자.month, 수집일자.day
            ty, tm, td = 오늘일자.year, 오늘일자.month, 오늘일자.day
    
            priv_day = (y-1)*12*28 + (m-1)*28 + d
            to_day = (ty-1)*12*28 + (tm-1)*28 + td
            avaliable_day = int(dict[약관코드]) * 28
            
            del_day = priv_day + avaliable_day - 1
            
            
            if del_day < to_day:
                answer.append(idx)
            
        return answer

     

    다른 사람의 풀이를 보고 오니, 날짜를 str[:5] 이런식으로 슬라이싱을 할 필요가 없다. 날짜가 2021.05.20 이런 형태로 들어오니까 '.' 을 기준으로 split를 하면 된다! 나는 슬라이싱을 하기 싫어서 timestamp로 바꿔서 year, month, day 을 추출함. 

     

     

    채점결과

    시간도 오래걸리고~ 용량도 많이 잡고~~


    다른 사람 풀이

    def to_days(date):
        year, month, day = map(int, date.split("."))
        return year * 28 * 12 + month * 28 + day
    
    def solution(today, terms, privacies):
        months = {v[0]: int(v[2:]) * 28 for v in terms}
        today = to_days(today)
        expire = [
            i + 1 for i, privacy in enumerate(privacies)
            if to_days(privacy[:-2]) + months[privacy[-1]] <= today
        ]
        return expire

    채점결과

     

    이 풀이가 훨씬 효율적이다!!

    '코딩테스트 연습' 카테고리의 다른 글

    옹알이 (2)  (0) 2023.11.18
    문자열 나누기  (0) 2023.11.17
    카드 뭉치  (0) 2023.11.15
    둘만의 암호  (0) 2023.11.14
    대충 만든 자판  (0) 2023.11.13
Designed by Tistory.