프로그래머스

[프로그래머스] 개인정보 수집 유효기간 파이썬

띵지니어 2023. 2. 5. 20:46

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

 

프로그래머스

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

programmers.co.kr

 

내 코드

def todict(a):
    dictionary = {}
    for i in a:
        x, y = i.split()
        dictionary[x] = int(y)*28
    return dictionary
         
def solution(today, terms, privacies):
    
    cnt = 1
    answer = []
    type_dict = todict(terms)
    today_to_day = (int(today[:4])*12*28) + int(today[5:7])*28 + int(today[8:])
    for i in privacies:
        x, y = i.split()
        day_all = (int(x[:4])*12*28) + int(x[5:7])*28 + int(x[8:])
        result = day_all + type_dict[y]
        if result <= today_to_day:
            answer.append(cnt)
        cnt += 1
    
    return answer

Review

처음 문제를 접근 했을때는 파이썬 모듈인 datetime으로 접근 했었다.

하지만 month 처리를 할 때 조건문을 넣어 나누기 연산하는 게 복잡하여

년, 달, 일 을 -> 일수로 다 변경하여 숫자 비교를 하는 식으로 해결을 하였다.

 

문제 해결을 위한 핵심은 모든 달이 28일로 고정이 된다는 점 이였다.

그러면 쉽게 일수로 바꿔서 계산이 가능하다.

예를 들어 2021년 5월 19일은 

2021 * 12 * 28 + 5 * 28 + 19 로 계산을 할수 있기 때문에 쉽게 비교를 통해 문제 해결을 했다.

 

todict 함수는 terms = ['A 6', 'B 12', 'C 3']를

일수로 바꿔 정리한 딕셔너리 형태로 바꾸는 함수이다[ 'A 6', 'B 12', 'C 3' ] --> { 'A':168, 'B':336, 'C':84 }