개인정보 수집 유효기간
풀이
풀이를 하면서 금방 풀 거라 생각했는데 테스트케이스에선 맞았으나, 실제 체험 간에 틀리는 경우가 있었다.
아래 테스트 케이스를 추가해서 확인을 해주었다.
"2020.12.17", ["A 12"], ["2010.01.01 A", "2019.12.17 A"], [1, 2]
처음 풀이하면서 크게 3가지 과정을 거쳤다.
1. 유효기간은 개월이므로 수집일자에서 개월 더하기
2. 더한 개월에 맞춰 년월일을 재구성하기
3. 현재 날짜와 종료일자를 년월일 순으로 비교하기
우선 맨 처음에 풀이를 진행하면서 %12를 사용함으로 월을 구분해 줬는데, 이때 만약 12로 떨어지게 되면 %12는 0이 된다는 것을 잊고 있었다. 그래서 이 문제를 해결하기 위해 아래와 같은 과정을 거쳤다.
if agree_date[1] > 12:
if agree_date[1] % 12 == 0:
agree_date[0] += ((agree_date[1] // 12)-1)
else: agree_date[0] += ((agree_date[1] // 12))
agree_date[1] = (agree_date[1] % 12)
if agree_date[1] == 0:
agree_date[1] = 12
물론 더 좋은 코드를 제출 하는 사람도 있겠지만, 해결하는 게 먼저리.
그러니 해결되었다.
# 개인정보 n개
# 약관 종류 별 개인정보 보관 유효기간
# 모든 달은 28일까지 있다고 가정
# A 6, B 12, C 3 의 방식 뒤의 값은 개월
# 오늘 기준으로 파기해야하는 것인지 확인 하고 파기해야하는 개인정보 번호 오름차순으로 result에 넣기
def solution(today, terms, privacies):
result = []
# 오늘 년,월,일
today = [int(today[0:4]), int(today[5:7]), int(today[8:10])]
# 약관 종류 재설정
type_agrees = []
for i in range(len(terms)):
type_agrees.append(terms[i].split())
# 개인정보 약관 동의일 및 종류
for i in range(len(privacies)):
date_type = privacies[i].split() # 약관 동의일 및 종류를 구분한 리스트
for type_agree in type_agrees:
if date_type[1] in type_agree:
# 비교를 위해 년월일 분리
# the_year = int(date_type[0][0:4])
# the_month = int(date_type[0][5:7])
# the_day = int(date_type[0][8:10])
agree_date = [int(date_type[0][0:4]), int(date_type[0][5:7]), int(date_type[0][8:10])]
# 약관 유효기간 개월 더하기
agree_date[1] += int(type_agree[1]) # 동의 타입에 적힌 동의 개월을 추가
if agree_date[1] > 12:
if agree_date[1] % 12 == 0:
agree_date[0] += ((agree_date[1] // 12)-1)
else: agree_date[0] += ((agree_date[1] // 12))
agree_date[1] = (agree_date[1] % 12)
if agree_date[1] == 0:
agree_date[1] = 12
#오늘날짜와 약관 유효기간 비교하기
for k in range(3):
if k == 2 and today[k] == agree_date[k]:
result.append(i+1)
break
elif today[k] != agree_date[k]:
if today[k] > agree_date[k]:
result.append(i+1)
break
return result
다른 사람 풀이
다른 풀이는 아래처럼 푼 풀이가 있었다.
def to_days(date):
year, month, day = map(int, date.split("."))
return year * 28 * 12 + month * 28 + day
def solution(today, terms, privacies):
months = {v[0]: int(v[2:]) * 28 for v in terms}
today = to_days(today)
expire = [
i + 1 for i, privacy in enumerate(privacies)
if to_days(privacy[:-2]) + months[privacy[-1]] <= today
]
return expire
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv1 K번째수(python) (0) | 2024.01.29 |
---|---|
프로그래머스 Lv1 신고 결과 받기(python) (0) | 2024.01.29 |
프로그래머스 Lv1 문자열 내림차순으로 배치하기(python) (0) | 2024.01.29 |
프로그래머스 Lv1 같은 숫자는 싫어(python) (0) | 2024.01.29 |
프로그래머스 Lv1 추억 점수(python) (0) | 2024.01.29 |