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

0Kim_jae·2023년 2월 1일
0

문제설명

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

문제 해석

현재 날짜, 약관종류+유효기간, 구별해야할 개인정보 이렇게 3가지 데이터가 주어지고 파기해야하는 개인정보의 번호를 출력해야하는 문제이다.

ex)

약관종류유효기간
A6 달
B12 달
C3 달
번호개인정보 수집일자약관종류
12021.05.02A
22021.07.01B
32022.02.19C
42022.02.20C

문제풀이

모든 달은 28일로 가정된다고 문제에 주어져 있다.
주어진 날짜 정보를 split이나 map함수를 이용하여 나누고 이를 일로 변환하여 약관에 맞게 계산하여 분류하면 가능할 것 같다.

term자료 정보에 관한 새로운 리스트를 생성하여 약관종류를 index로 가지고 그에 따른 유효기간을 value값으로 가지게 한다.

enumerate를 이용하여 privacies 데이터를 index와 value값을 추출하여 value 값은 날짜와, 약관종류로 분리하고 약관종류에 다른 유효기간을 대입하여 주어진 today 데이터의 값과 비교하여 작거나 같은 경우에만 인덱스값에 1을 더하여 정답 리스트에 append한다.

코드풀이

# 연월일 날짜정보를 일(day)로 변환
def dateToday(date):
    year, month, day = map(int, date.split("."))
    return int((year * 12 * 28) + (month * 28) + day)
    
# 주어진 정보를 통한 정답 구하기
def solution(today, terms, privacies):
    terms_val = dict() # 약관 종류에 따른 유효기간 저장을 위한 리스트
    answer = [] # 정답 저장
    
    #약관 정보를 리스트화
    for var in terms:
        a, b = var.split(' ')
        b = int(b)
        terms_val[a] = b
     
    # 개인정보를 수집날짜(d)와 약관종류(V)로 분리
    # d는 일로 변환하고 terms_val[v]를 통하여 유효기간 추출
    for index, val in enumerate(privacies):
        d, v = val.split(' ')
        priv_date = dateToday(d)
        priv_var_val = terms_val[v]
        
        if priv_date + priv_var_val*28 <= dateToday(today):
            answer.append(index+1)
        
    
    return answer

0개의 댓글