본문 바로가기

코딩 테스트/Lv.1

[프로그래머스] 개인 정보 수집 유효기간 with Python

문제


- 모든 달은 28일까지 있으며, 약관마다 개인정보 보관 유효기간이 정해져 있고 유효기간이 지나면 파기해야한다. - - today는 문자열,
  terms(약관 및 유효기간)는 리스트,
  privacies(개인정보 수집일자 및 약관)도 리스트
- 다음과 같이 문제 풀이에 필요한 정보가 주어지며 개인정보를 파기해야 할 privacies 리스트 인덱스 번호 +1 을 리스트로 반환하면 되는 문제

 

풀이 과정

모든 달은 28일로 고정되어 있음으로 개인정보 수집일자에 해당하는 달에 유효기간을 더한 뒤 날짜만 하루 빼주면 파기 날짜이므로

  • 금월에 유효기간을 더한 뒤 12월을 넘어가면 +1년
  • 이후 금일에 -1을 해준 뒤 만약 일수가 0일이면 28일로 변경 후 월도 -1
  • 월도 0월이면 12월로 변경 후 년도 -1

 

코드

def solution(today, terms, privacies):
    dict_user = {} #user별 유효기간 저장할 딕셔너리
    answer = []
    today = int(today.replace('.', '')) #yyyymmdd로 변경
    count = 0 #파기 할 문서 인덱스 위치
    
    # user 별 유효기간 저장
    for term in terms:
        user, m = term.split(" ")
        dict_user[user] = int(m)
    
    for privacie in privacies:
        count = count + 1
        date, user = privacie.split(" ")
        yyyy, mm, dd = date.split(".")
        
        d = int(dd)-1 # 금일 -1
        m = int(mm)+dict_user[user] #금월 + 유효기간
        y = int(yyyy)
        
        #유효기간 + 금월이 1년이 넘어갈 때
        if m > 12 :
            if m%12 == 0:
                y = y + int(m/12) - 1
                m = 12
            else:
                y = y + int(m/12)
                m = m%12
                
        # 일이 0이면 28로 바꿔주면서 조건 따라 년과 달도 변경
        if d == 0:
            d = 28
            m = m - 1
            if m == 0:
                m = 12
                y = y - 1
        
        # 1의 자리 숫자 앞에 0
        if d < 10:
            d = "0"+str(d)
            
        if m < 10:
            m = "0"+str(m)
        
        date2 = int(str(y)+str(m)+str(d))
        
        if date2 < today:
            answer.append(count)
    
    return answer