[프로그래머스] 개인정보 수집 유효기간

kiki·2024년 1월 24일
0

프로그래머스

목록 보기
71/78

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/150370#

문제 설명

유효기간이 지났는지 확인하기
자세한 설명은 링크에서 확인하세용

1차 시도

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월을 넘는 경우를 처리해줬어야했는데 이 부분에서 많이 헤맸다.

2차 시도 - 다른 사람 풀이

도대체 이 문제는 어떻게 풀어야 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

이렇게 주어진 년월일을 일수로 모두 변환해서 이를 오늘 날짜와 비교하는 방식이다.
와우,,,,,,,,,,,,,

여기서 주목할 점은 세가지다.

  • 날짜와 연관된 문제를 일수로 변환해 푸는 방법이 있다.
  • map을 이용해 간단하게 list 요소들을 int type으로 변환할 수 있다.
    • list(map(int, date.split("."))): date를 마침표 기준으로 split해서 list 만들고 이 리스트의 원소들을 int type으로 변환하는 코드
  • dictionary도 comprehension으로 쓸 수 있다.
    • {i[0]:int(i[2:])*28 for i in terms}

그냥 알고 생각해보면 별거아니지만 문제 풀 때만큼은 정말 자괴감이 든다~~ level 1인데 이렇게까지 풀어야한다고? 하면서.

잘 기억해두고 다음에 같은 활용 문제가 나왔을 때 적용해서 풀 수 있으면 된거다.
map도 어제 제대로 다시 공부했는데 오늘 나와서 썼으니! 복습이 된 셈이다.

0개의 댓글