algo약관동의

박진은·2023년 3월 12일
0

코테

목록 보기
13/44

문제는 아래 링크에서 참조 바란다.
https://school.programmers.co.kr/learn/courses/30/lessons/150370

def getAddMonth(d1, d2):
    # d1 약관동의 날짜 문자열
    # d2 유효 기간 문자열
    d2 = int(d2)
    date = d1.split('.')

    for i, x in enumerate(date):  # 숫자로 변환
        date[i] = int(x)

    Y = date[0]
    m = date[1]
    d = date[2]

    if m + d2 > 12:

        rest = m + d2
        y = 0

        while rest > 12:
            rest -= 12
            y += 1
        Y += y
        m = rest
    else:
        m += d2
    print(Y,m,d)
    return (Y, m, d)


def compareDate(today, pday):
    today = today.split('.')
    ty = int(today[0])
    tm = int(today[1])
    td = int(today[2])

    if ty > pday[0]:
        return -1
    elif ty == pday[0]:
        if tm > pday[1]:
            return -1
        elif tm == pday[1]:
            if td >= pday[2]:
                return -1
    return 1


def solution(today, terms, privacies):
    # today 오늘 날짜 문자열
    # terms 약관의 유효 기간을 담은 1차원 문자열 배열
    # privacies 수집된 갱ㄴ정보의 정보를 담은 1차원 문자열 배열

    # 딕셔너리로 변환
    answer = []
    due = {x.split()[0]: int(x.split()[1]) for x in terms}

    for e, i in enumerate(privacies):
        privacie = i.split()
        addMonth = due[privacie[1]]
        addResult = getAddMonth(privacie[0], addMonth)
        if compareDate(today, addResult) < 0:
            answer.append(e+1)
    answer.sort()

    return answer

이 문제에서 조금 해맨 이유는 날짜를 비교하는 함수를 만드는 데서 있었다. 년도를 먼저 비교하고 같다면 달을 비교하고 같다면 일을 비교해야했다. 이런 사소한 로직에서 실수가 나왔다
그리고 내가 하는 비슷한 실수가 있는데 자꾸 list.split[0] 이런 식으로 코딩한다. list.split()[0] 이런식으로 작성해야한다.

profile
코딩

0개의 댓글