프로그래머스
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