프로그래머스 lv1 개인정보 수집 유효기간 파이썬
휴... 수정 전에서 말한 바와 같이 처음에 접근했던
년도
와 달
을 일수
로 계산 하는 방식과,,, 슬라이싱
그리고 dictionary
를 사용하지 못했던것이
아쉬워서 이틀동안 다시 풀어봤다...결과
def solution(today, terms, privacies):
answer = []
terms_d = {}
today = 336 * int(today[:4]) + 28 * int(today[5:7]) + int(today[8:])
for i in terms:
alpha, month = i.split()
terms_d[alpha] = int(month)
for num ,j in enumerate(privacies, start = 1) :
j = 336 * int(j[:4]) + 28 * int(j[5:7]) + int(j[8:10]) + (terms_d[j[11:]] * 28)
if today >= j:
answer.append(num)
return answer
우선 처음에 생각한것 처럼 일수로 변경해주고
`dictionary`를 계속 처음부터 만들어주고 시작하려고 하니 문제였다...
그냥.. 하나씩 받아주며 됐는데...ㅜㅜ 뻘짓 ㄹㅈㄷ...
for
문으로 돌려서 i
를 일일히 받아주고 사실 split()
도 안쓰고 싶었는데 이건.... 포기못했다ㅜ
그 후 enumerate
라는 함수는 다른 분들이 코드로 많이 쓰시길래 찾아봤더니 이럴수가..... 인덱스를 붙여주는 함수였다.... 다들 멋쟁이.. 심지어 찾아보니 start
값도 지정이 가능해서
그래서 start = 1
로 1부터 시작하게 만들어 준후, 똑같이 j
를 일수로 변경해줬다.
처음엔 오류가 생겨서 뭐지 했는데...
terms 를 달로 그대로 계산하고 있었다는 이야기...
똑같이 `28`을 곱해주자...
이것도 처음과 같이 변수로 넣기보다는 for
문에 바로바로 실행하고
바로바로 append
해주는 식으로 넣었다
( runtime은... 소중하니깐요)
테스트케이스가 워낙 많아서.... 넘어갈까 했는데 성공 ㅠㅠㅠㅠ 이틀동안 이것저것 시도해본 결과가 뿌듯하네요..
눈물의 실행횟수.... 267번... 실험...성공적..!
이 블로그 글은 링크를 달아놔서...보실지 모르겠지만...오늘도 코딩하시는 여러분 멋쟁이십니다.... 다들 새해복 많이 받으시고 행복하세요...😊😊
우선 내 코드는
def solution(today, terms, privacies):
a = []
answer = []
cnt = 1
today = "".join(today.split('.'))
for j in terms:
a.append(j.split())
for i in privacies:
i = i.replace(".", " ").split()
for x in range(len(terms)):
if i[3] == a[x][0]:
i[1] = str(int(i[1]) + int(a[x][1]))
if int(i[1]) > 12:
if int(i[1]) % 12 == 0:
i[0] = str((int(i[0]) + (int(i[1])//12)) -1)
i[1] = str(int(i[1]) - (((int(i[1])//12)*12)-12))
else:
i[0] = str(int(i[0]) + (int(i[1])//12))
i[1] = str(int(i[1]) - (int(i[1])//12)*12)
if len(i[1]) == 1:
i[1] = '0' + i[1]
if i[1] == '00':
i[1] = '01'
result = "".join(i[0: 3])
if int(today) >= int(result):
answer.append(cnt)
cnt += 1
return answer
우선은
1. 일수로 계산하기 2. split()을 써서 원형으로 돌리기 3. dictionary 사용하기 4. runtime 걸리지 않게 변수를 지나치게 사용하거나, 여러번 돌리는 코드는 작성하지 말기 한번에 끝낼것. 5. terms도 똑같이 split() 해서 비교해주기
를 큰 그림으로 잡고 시작했다. 사실 좀 더 줄일 수 있을 것 같은데.. 싶긴 하지만 다행히 runtime
에 안걸리고 한번에 통과됐다.
today
는 ,
를 기점으로 나눠주고, privacies
는 알파벳이 붙어있기에
i = i.replace(".", " ").split()
을 통해서 .
을 " "
로 바꾸고
split()
해주었다.
그리고 for i in privacies:
를 통해서 privacies
를 매 순간 불러내기 보다는 하나씩만 불러서 runtime
에 안걸리고 짧게 끝내려고 노력했으나.... 습 썩 맘에 들진 않음
인덱스를 사용하지 말고 a[1:]
이런식의 슬라이싱도 있고 처음에도
dictionary
쓰는게 낫지 않나 싶지만...사실 일수
로도 접근하고 싶었는데 3가지 다 실패해서...
그 후 join()
함수를 써서 값의 크기를 비교하는 식으로 작성했다.
사실... 썩 만족하진 않아서 좀 더 수정해볼 생각.... 분발해야지 (수정완료!)