본문 바로가기
개발/Algorithm 문제 풀이

[프로그래머스] lv.1 개인정보 수집 유효기간

by DenverAlmighty 2024. 2. 12.
반응형

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

 

프로그래머스

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

programmers.co.kr

 

내 풀이

def solution(today, terms, privacies):
    answer = []
    today_int = int(today[0:4])*10000 + int(today[5:7])*100 + int(today[8:10])
    terms_dict = {}
    for term in terms:
        tmp = term.split()
        terms_dict[tmp[0]] = int(tmp[1])
    for i in range(len(privacies)):
        privacy = privacies[i]
        prvcy_list = privacy.split(' ')
        date_str = prvcy_list[0]
        y = int(date_str[0:4])
        m = int(date_str[5:7])
        d = int(date_str[8:10])
        term_int = terms_dict[prvcy_list[1]]
        new_y = y
        new_m = m + term_int
        new_d = d
        if d == 1:
            new_d = 28
            new_m -= 1
        else:
            new_d -= 1
        if new_m > 12:
            quotient = new_m//12
            remainder = new_m%12
            if remainder == 0:
                quotient-= 1
                remainder=12
            new_y += quotient
            new_m = remainder
        new_date = new_y*10000 + new_m*100 + new_d
        if new_date < today_int:
            answer.append(i+1)
    return answer

 

 

리뷰

1. 직관적으로 보이려고 날짜를 int 로 변환할 떄 Year*1000 + Month*100 + Day 로 계산했는데 이러면 1일, 12월 등에 문제가 생겨 예외 처리를 해줘야한다. 그래서 그냥 Year*12*28 + Month*28 + Day로 계산하는게 낫다.

2. map, lambda 사용하자

 

다른 사람의 풀이 

def to_days(date):
    y, m, d = map(int, date.split("."))
    return y*28*12 + m*28 + d
    
def solution(today, terms, privacies):
    answer = []
    # 함수 사용
    #today_int = int(today[0:4])*10000 + int(today[5:7])*100 + int(today[8:10])
    today_int = to_days(today)
    
    # comprehension 사용
    #for term in terms:
    #    tmp = term.split()
    #    terms_dict[tmp[0]] = int(tmp[1])
    terms_dict = {v[0]: int(v[2:])*28 for v in terms}
    
    for i in range(len(privacies)):
        tmp_lst = privacies[i].split()
        end_date = to_days(tmp_lst[0]) + terms_dict[tmp_lst[1]] -1
        if end_date < today_int:
            answer.append(i+1)
    return answer

 

 

728x90
반응형