문제
- 모든 달은 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
'코딩 테스트 > Lv.1' 카테고리의 다른 글
[프로그래머스] 햄버거 만들기 with Kotlin (0) | 2023.11.06 |
---|---|
[프로그래머스] 바탕화면 정리 with Kotlin (0) | 2023.11.06 |
[프로그래머스] 신고 결과 받기 with Python (0) | 2023.11.04 |
[프로그래머스] 달리기 경주 with Python (0) | 2023.11.04 |
[프로그래머스] 신규 아이디 추천 with Python (0) | 2023.11.04 |