https://school.programmers.co.kr/learn/courses/30/lessons/150370
def date_to_num(date_str):
yy, mm , dd = map(int, date_str.split('.'))
return dd + 100*(mm + 100*yy)
def terms_to_dict(terms):
terms_dict = {}
for item in terms:
terms_category, expiration_range = item.split()
terms_dict[terms_category] = int(expiration_range)
return terms_dict
def solution(today, terms, privacies):
answer = []
today_int = date_to_num(today)
terms_dict = terms_to_dict(terms)
expiration_period = []
for entry in privacies:
date_str, category = entry.split()
category_value = terms_dict.get(category, 0)
if category_value == 0:
raise KeyError
updated_month = int(category_value) + int(date_str.split('.')[1])
if updated_month > 12:
added_year = 0
while updated_month > 12:
updated_month -= 12
added_year += 1
if len(str(updated_month)) == 1:
updated_month = str(0)+str(updated_month)
date_str = '.'.join([str(int(date_str.split('.')[0])+added_year),str(updated_month),date_str.split('.')[2]])
else:
if len(str(updated_month)) == 1:
updated_month = str(0)+str(updated_month)
date_str = '.'.join([str(int(date_str.split('.')[0])),str(updated_month),date_str.split('.')[2]])
expiration_period.append(date_str)
for i in range(len(expiration_period)):
if today_int >= date_to_num(expiration_period[i]):
answer.append(i+1)
return answer
자유 형식
이미 3번이나 풀었던 문제라서 그냥 바로 구현시작
def solution(today, terms, privacies):
def date_to_day(date):
year,month,day = date.split(".")
result_day = int(year)*12*28 + int(month)*28 + int(day)
return result_day
terms_dict = {}
today_day = date_to_day(today)
result = []
for term in terms:
category, expiration_month = term.split()
terms_dict[category] = int(expiration_month)*28
for idx,privacy in enumerate(privacies):
date, term_cat = privacy.split()
if today_day >= date_to_day(date) + terms_dict[term_cat]:
result.append(idx+1)
return result
확실히 여러번 풀면 실력이 늘긴 느는듯.
코드가 훨씬 깔끔하고 구현시간도 줄었음.
댓글로 또는 이곳에 질문 남겨주세요.