개인정보 수집 유효기간

Polla·2023년 1월 21일
0

programmers

목록 보기
31/58
post-thumbnail

프로그래머스 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() 함수를 써서 값의 크기를 비교하는 식으로 작성했다.




	사실... 썩 만족하진 않아서 좀 더 수정해볼 생각.... 분발해야지 (수정완료!)
profile
트러블 슈팅 Blog => https://polla.palms.blog/home

0개의 댓글