프로그래머스 코딩테스트/Python

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

Coding-Su 2024. 7. 10. 21:56
728x90

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

정답

def solution(today, terms, privacies):
    answer = []
    alpha = []
    month = []
    #문자로 되어있는 날짜를 숫자로 변경했습니다.
    todayA = [int(today[0:4]), int(today[5:7]), int(today[8:10])]
    
    # terms에 있는 문자와 숫자를 나누어주었습니다.
    for i in range(0, len(terms)):
        if len(terms[i]) == 3:
            alpha.append(terms[i][0])
            month.append(int(terms[i][2]))
        else:
            strs = ""
            alpha.append(terms[i][0])
            atrs = terms[i][2:]
            month.append(int(atrs))
            
    for i in range(0, len(privacies)):
        #문자로 되어있는 날짜를 숫자로 변경했습니다.
        pday = [int(privacies[i][0:4]), int(privacies[i][5:7]), int(privacies[i][8:10])]

        # privacies에서 약관 종류를 전에 저장한 alpha와 비교하여 월에 약관의 유효기간을 더해주었습니다.
        for j in range(0, len(alpha)):
            if privacies[i][11] == alpha[j]:
                pday[1] += month[j]
        
        # 월을 더했을 경우 12보다 크면 년도를 올려주도록 하였습니다.
        if pday[1] > 12:
            pday[0] += pday[1] // 12
            if pday[1] % 12 == 0:
                pday[0] -= 1
                pday[1] = 12
            else:
                pday[1] = pday[1] % 12
        
        # 조건에 맞도록 약관이 지났으면 answer에 추가하였습니다.
        if pday[0] < todayA[0]:
            answer.append(i+1)
        elif pday[0] == todayA[0]:
            if pday[1] < todayA[1]:
                answer.append(i+1)
            elif pday[1] == todayA[1]:
                if pday[2] <= todayA[2]:
                    answer.append(i+1)

    return answer

 

계산을 조금 쉽게 하기 위해 모든 날짜 문자에서 숫자로 바꾸었습니다. 그 뒤에 약관의 종류와 유효기간을 alpha(약관의 종류)와 month(유효기간)에 저장하였습니다.

 

그 다음 privacies에서 약관의 종류가 같은것을 찾아 유효기간을 더해준 뒤 pday[1](월)이 12보다 크면 pday[0](년)이 증가하도록 조건문을 작성하였습니다.

 

마지막으로 약관의 유효기간이 지난 것들을 골라 answer에 추가하여 문제를 풀었습니다. 

728x90