본문 바로가기
카테고리 없음

[프로그래머스] 개인정보 수집 유효기간 (Python, 2023 카카오 blind recruitment)

by 파이현 2025. 10. 7.
 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


☁️ 문제 설명

  • 약관 종류는 여러개고 각 약관마다 개인정보 보관 유효기간이 정해져 있음
  • 수집된 개인 정보는 유효기간 전까지만 보관 가능
  • 유효 기간이 지났으면 개인정보는 파기
  • 파기해야 할 개인정보 번호를 구해야 함
  • 모든 달은 28일까지 있다고 가정

 

☁️ 입출력

  • 입력: `today`, `terms`, `privacies`
    • today: 오늘 날짜를 의미하는 문자열 ("2022.05.19")
    • terms: 약관의 유효기간을 담은 1차원 배열 ("A 6","B 12")
    • privacies: 수집된 개인정보의 정보를 담은 1차원 배열 ("2021.05.02 A")
  • 출력
    • `answer`:파기해야 할 개인정보의 번호를 오름차순 정리한 1차원 배열

 


💡 풀이 아이디어

  • term은 주어진 1차원 배열 형태 대신 dict 형태로 변환하기
  • 반복문 사용해서 privacy 하나씩 탐색

 

🚨 주의할 점

  • 날짜 덧셈이라는 거 (241205에서 1달 더하면 250104라는거)
  • 240701의 전 날은 240628 이라는 점

 

💻 코드

def solution(today, terms, privacies):
    answer = []
    
    term_dict = {}
    for term in terms:
        name, period = term.split()
        term_dict[name] = int(period)
    
    ty, tm, td = map(int, today.split('.'))
    
    for i, privacy in enumerate(privacies):
        start_date, term = privacy.split()
        yy, mm, dd = map(int, start_date.split('.'))
        
        dd = dd - 1
        if dd == 0:
            dd = 28
            mm -= 1
            
        mm = mm + term_dict[term]
        if mm > 12:
            yy += (mm - 1) // 12
            mm = ((mm - 1) % 12) + 1
        
        expiry_date = f"{yy:04d}.{mm:02d}.{dd:02d}"
        
        if expiry_date < today:
            answer.append(i+1)
    
    return answer