본문 바로가기

iOS 앱 개발자 프로젝트/알고리즘 코드카타

[Algorithm] 개인정보 수집 유효기간 (w/ Swift & Python)

개인정보 수집 유효기간 

 

프로그래머스

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

programmers.co.kr

 

현재 날짜(today), 데이터 보관 기간을 정의하는 조건(terms), 그리고 개인정보 수집 날짜(privacies).

코드의 목적은 보관 기간이 만료된 정보의 인덱스를 찾아내는 것

 

 

laguage = swift

 

func solution(_ today: String, _ terms: [String], _ privacies: [String]) -> [Int] {
    var yeon = [Int]()
    var termDict = [String: Int]()
    let date = myDate(today: today)
    
    for t in terms {
        let term = t.components(separatedBy: " ")
        termDict[term[0]] = Int(term[1])
    }
    
    for p in privacies.indices {
        let privacy = privacies[p].components(separatedBy: " ")
        if myDate(today: privacy[0]) + (termDict[privacy[1]] ?? 0) * 28 <= date {
            yeon.append(p + 1)
        }
    }
    
    return yeon
}

private func myDate(today: String) -> Int {
    let date = today.split(separator: ".")
    let year = Int(date[0]) ?? 0
    let month = Int(date[1]) ?? 0
    let day = Int(date[2]) ?? 0
    return (year * 12 * 28) + (month * 28) + day
}

 

myDate 함수에서 주어진 날짜의 형식(연,월,일)을 분리하여 특정 숫자 값으로 변환했다. 연도를 월로, 월을 일로 환산하여 최종적으로는 일 단위로 표현된 총합이 된다. 모든 월은 요구 조건에 맞춰 28일로 계산했다.

 

 

 

laguage = python

 

def solution(today, terms, privacies):
    today = list(map(int, today.split('.'))) 
    terms = {i[0]: int(i[2:])for i in terms}
    
    yeon = [] # 파기할 정보
    for i, pri in enumerate(privacies):
        day, kind = pri.split()
        day = list(map(int, day.split('.')))
        month = terms[kind] # 유효기간
        
        day[1] += month
        while day[1] > 12: # 월이 12보다 크면 월-12, 연+1을 계속 반복
              day[1] -= 12
              day[0] += 1
        
        day[2] -= 1
        if day[2] == 0: # 월은 28일까지이므로 0이면 28로 바꿔줌
           day[2] = 28
           day[1] -= 1
        # print(day) # 보관 가능 일자
        
        # 파기할 정보
        if day[0] < today[0]:
            yeon.append(i+1)
        elif day[0] == today[0] and day[1] < today[1]:
            yeon.append(i+1)
        elif day[0] == today[0] and day[1] == today[1] and day[2] < today[2]:
            yeon.append(i+1)
                    
    return yeon

 

현재 날짜(today), 데이터 보관 기간을 정의한 조건(terms), 그리고 개인정보 수집 날짜(privacies)를 세팅하고, 리스트의 각 항목을 순회하며, 해당 데이터의 보관 기간이 만료되었는지를 판단한다. 보관 기간 계산을 위해 수집 날짜에 해당 데이터 유형의 보관 기간(월 단위)을 더해준다. 만약 보관 기간이 만료되었다면, 해당 데이터의 인덱스(1부터 시작)를 결과 리스트에 추가한다.결과적으로, 이 보관 기간이 만료된 개인정보의 인덱스 리스트를 반환하여 어떤 정보를 파기해야 하는지 알 수 있게 된다.