https://school.programmers.co.kr/learn/courses/30/lessons/150370#
유효기간이 지났는지 확인하기
자세한 설명은 링크에서 확인하세용
def solution(today, terms, privacies):
term = {}
result = []
for i in terms:
tmp = i.split(" ")
term[tmp[0]] = int(tmp[1])
for n,i in enumerate(privacies):
tmp = list(map(int, i[:-2].split(".")))
tmp[1]+=term[i[-1]]
if tmp[1]>12:
if tmp[1]%12==0:
tmp[0]+=(tmp[1]//12)-1
tmp[1]=12
else:
tmp[0]+=tmp[1]//12
tmp[1]=tmp[1]%12
print(tmp)
y = str(tmp[0])
m=str(tmp[1]) if tmp[1]>=10 else '0'+str(tmp[1])
d=str(tmp[2]) if tmp[2]>=10 else '0'+str(tmp[2])
if y+m+d<=today.replace('.',''):
result.append(n+1)
return result
정말 어떻게 풀어야할지 떠오르지않아서 하드코딩했다.
유효기간은 모두 월 단위라니까 유효기간(n개월)을 수집일자에 더해주고 그를 처리하는 방식으로 해결했다. 근데 정해진 date type?이 있어서 조금 어려움이 있었다.
그리고 유효기간을 더한 후 15월 과 같이 12월을 넘는 경우를 처리해줬어야했는데 이 부분에서 많이 헤맸다.
도대체 이 문제는 어떻게 풀어야 level 1인가 싶어서 통과 후 다른 사람 풀이를 보니...
일수로 계산을 해서 비교하는 방법이 있었다. 그러니까 달이 모두 28일로 제한된 것이었나보다.
def date_to_day(date):
date = list(map(int, date.split(".")))
day = date[0]*12*28 + date[1]*28 + date[2]
return day
def solution(today, terms, privacies):
result = []
term = {i[0]:int(i[2:])*28 for i in terms}
for i in terms:
term[i[0]] = int(i[2:])*28
today = date_to_day(today)
for n,i in enumerate(privacies):
if today>=date_to_day(i[:-2])+term[i[-1]]:
result.append(n+1)
return result
이렇게 주어진 년월일을 일수로 모두 변환해서 이를 오늘 날짜와 비교하는 방식이다.
와우,,,,,,,,,,,,,
여기서 주목할 점은 세가지다.
list(map(int, date.split(".")))
: date를 마침표 기준으로 split해서 list 만들고 이 리스트의 원소들을 int type으로 변환하는 코드{i[0]:int(i[2:])*28 for i in terms}
그냥 알고 생각해보면 별거아니지만 문제 풀 때만큼은 정말 자괴감이 든다~~ level 1인데 이렇게까지 풀어야한다고? 하면서.
잘 기억해두고 다음에 같은 활용 문제가 나왔을 때 적용해서 풀 수 있으면 된거다.
map도 어제 제대로 다시 공부했는데 오늘 나와서 썼으니! 복습이 된 셈이다.