[노씨데브 킬링캠프] 5주차 - 문제풀이: 개인정보 수집 유효기간

KissNode·2024년 2월 20일
0

노씨데브 킬링캠프

목록 보기
57/73

개인정보 수집 유효기간

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

이전 풀었던 기록

def date_to_num(date_str):
    yy, mm , dd = map(int, date_str.split('.'))
    return dd + 100*(mm + 100*yy)

def terms_to_dict(terms):
    terms_dict = {}
    for item in terms:
        terms_category, expiration_range = item.split()
        terms_dict[terms_category] = int(expiration_range)
    return terms_dict

def solution(today, terms, privacies):
    answer = []
    today_int = date_to_num(today)
    terms_dict = terms_to_dict(terms)
    expiration_period = []
    
    for entry in privacies:
        date_str, category = entry.split()
        category_value = terms_dict.get(category, 0)
        if category_value == 0:
            raise KeyError
        updated_month = int(category_value) + int(date_str.split('.')[1])
        if updated_month > 12:
            added_year = 0
            while updated_month > 12:
                updated_month -= 12
                added_year += 1
            if len(str(updated_month)) == 1:                
                updated_month = str(0)+str(updated_month)
            date_str = '.'.join([str(int(date_str.split('.')[0])+added_year),str(updated_month),date_str.split('.')[2]])
        else:
            if len(str(updated_month)) == 1:
                updated_month = str(0)+str(updated_month)
            date_str = '.'.join([str(int(date_str.split('.')[0])),str(updated_month),date_str.split('.')[2]])
        expiration_period.append(date_str)
    for i in range(len(expiration_period)):
        if today_int >= date_to_num(expiration_period[i]):
            answer.append(i+1)
    return answer

문제 파악 [필수 작성]

문제이해

제한 조건 확인

아이디어

시간복잡도

자료구조

접근 방법 [필수 작성]

자유 형식

코드 구현 [필수 작성]

1차 시도(소요시간10분)

이미 3번이나 풀었던 문제라서 그냥 바로 구현시작

def solution(today, terms, privacies):
    def date_to_day(date):
        year,month,day = date.split(".")
        result_day = int(year)*12*28 + int(month)*28 + int(day)
        return result_day
    
    terms_dict = {}
    today_day = date_to_day(today)
    result = []
    
    for term in terms:
        category, expiration_month = term.split()
        terms_dict[category] = int(expiration_month)*28
    
    for idx,privacy in enumerate(privacies):
        date, term_cat = privacy.split()
        if today_day >= date_to_day(date) + terms_dict[term_cat]:
            result.append(idx+1)
            
    return result

배우게 된 점 [필수 작성]

확실히 여러번 풀면 실력이 늘긴 느는듯.

코드가 훨씬 깔끔하고 구현시간도 줄었음.

질문 [ 필수 X ]

댓글로 또는 이곳에 질문 남겨주세요.

profile
어제보다 더, 내일보다 덜.

0개의 댓글

관련 채용 정보