Updated:

PGS / 개인정보 수집 유효기간

풀면서

✅ 교집합을 이용하는 방법을 시도했는데 시간 초과로 실패했다.

결국 해결한 코드다.

def solution(today, terms, privacies):
    answer = []
    # 모든 달은 28일까지
    terms_ = {}
    for t in terms:
        c, m = t.split(" ")
        terms_[c] = int(m)
        
    for i, p in enumerate(privacies):
        date, c = p.split(" ")
        y, m, d = map(int, date.split("."))
        for _ in range(terms_[c]):
            d += 28
            if d > 28:
                m +=1
                d -= 28
                
                if m > 12:
                    y += 1
                    m = 1
        
        d-=1
        if d == 0:
            d = 28
            m -= 1
            if m < 1:
                m = 12
                y -= 1
                
        c_y, c_m, c_d = (map(int, today.split(".")))
        if c_y > y:
            answer.append(i+1)
        elif c_y == y and c_m > m:
            answer.append(i+1)
        elif c_y == y and c_m == m and c_d > d:
            answer.append(i+1)
    
    return answer

다른 풀이를 찾아보니 더 간단한 방법이 있어서 코드를 수정했다.

code ⌨️

def solution(today, terms, privacies):
    answer = []
    # 모든 달은 28일까지
    terms_ = {}
    for t in terms:
        c, m = t.split(" ")
        terms_[c] = int(m)
        
    y, m, d = map(int, today.split("."))
    today_ = y * 12 * 28 + m * 28 + d
    
    for i, p in enumerate(privacies):
        date, c = p.split(" ")
        y, m, d = map(int, date.split("."))
        
        # 모두 '일' 단위로 바꾸기
        date_ = y * 12 * 28 + m * 28 + d
        date_ += 28 * terms_[c]

        if date_-1 < today_:
            answer.append(i+1)
    
    return answer


풀고 나서👆👀

시간, 분, 초 개념이 나오는 문제에서 전부 단위로 바꿔서 계산했던 것처럼 년, 월, 달, 일 문제도 같은 단위로 바꿔서 계산하면 편리하다.

Leave a comment