본문 바로가기
Algorithm

SwiftUI: 개인정보 수집 유효기간

by songmoro 2023. 8. 30.
728x90

링크

 

n개의 개인정보, m개의 약관이 있어 주어진 날짜 기준으로 개인정보가 약관에 적힌 유효기간을 넘었는지 검사하는 문제입니다.

String을 Int로 바꿔서 주어진 날짜와 유효기간을 비교해서 풀었는데, dateFomatter를 쓰는 훨씬 간편한 방법이 있었네요.

 

func solution(_ today:String, _ terms:[String], _ privacies:[String]) -> [Int] {
    var result: [Int] = []
    var idx: Int = 1
    
    let todayDate: Int = {
        return Int(today.replacingOccurrences(of: ".", with: ""))!
    }()
    
    var termsSet: [String: Int] = [:]
    
    terms.map {
        let tempTerm = $0.split(separator: " ")
        termsSet.updateValue(Int(tempTerm[1])!, forKey: String(tempTerm[0]))
    }
    
    privacies.map {
        let tempPrivacy = $0.split(separator: " ")
        
        var tempTermDate: [Int] = String(tempPrivacy.first!).split(separator: ".").map {
            return Int($0)!
        }
        
        let termPeriod: [Int] = {
            var tempTermPeriod: [Int] = [0, 0]
            let tempPrivacyPeriod = termsSet[String(tempPrivacy.last!)]!
            
            tempTermPeriod[0] = tempPrivacyPeriod / 12
            tempTermPeriod[1] = tempPrivacyPeriod.quotientAndRemainder(dividingBy: 12).remainder
            
            return tempTermPeriod
        }()
        
        tempTermDate[0] += termPeriod[0]
        tempTermDate[1] += termPeriod[1]
        
        if tempTermDate[1] > 12 {
            tempTermDate[0] += 1
            tempTermDate[1] -= 12
        }
        
        var termDate: Int = {
            return tempTermDate[0] * 10000 + tempTermDate[1] * 100 + tempTermDate[2]
        }()
        
        if todayDate >= termDate {
            result.append(idx)
        }
        idx += 1
    }
    return result
}
728x90

'Algorithm' 카테고리의 다른 글

SwiftUI: 덧칠하기  (1) 2023.12.17
SwiftUI: 추억 점수  (0) 2023.12.17
SwiftUI: 성격 유형 검사하기  (1) 2023.12.17
SwiftUI: 공원 산책  (0) 2023.08.29
SwiftUI: 달리기 경주  (0) 2023.08.12