새소식

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

[Swift] 개인정보 수집 유효기간

  • -

[문제]

코딩테스트 연습 - 개인정보 수집 유효기간 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

[문제 풀이]

privacies "2021.05.02 A"라는 변수가 주어지고 "A 6"이라는 조건이 넣어지는 변수가 주어진다.

알파벳은 날짜에서 월을 숫자만큼 움직이고 그 결과가 today "2022.05.19" 이하이면 result에 해당 인덱스를 넣어주면 된다.

 

문제 자체가 어렵진 않지만 구현이 까다로워서 어떻게 해야 더 간단하게 풀 수 있을까 고민을 하는 문제이다.

 

해당 문제를 더 간단하게 풀기 위해서 today를 int 값으로 바꿔서 계산하기로 했다.

이를 위해 year는 * 12 * 28 을 month 는 * 12 를 곱해서 day와 함께 더해서 반환해주는 함수를 만들었다.

 

또한 딕셔너리를 이용해서 terms의 알파벳에 각각 해당하는 숫자들을 입력시켜주는 것으로 사전준비를 마쳤다.

 

이제 privacies를 반복문을 통해서 방문하면서 날짜를 얻는데 사용했던 getDate함수를 이용하면서 해당 privacies가 date 이하라면 해당 index + 1 을 answer에 넣어주자.

[회고]

getDate 함수를 만들어서 사용을 하는 걸 처음에 생각하지 못하다가 인터넷을 보고 떠오를 수 있었다.

privacies와 today 두 쪽 모두에서 사용되는 함수라 재사용성이 높으니 이와 같은 문제에는 함수를 따로 빼서 만들어서 사용하도록 하자.

[코드]

import Foundation

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

func solution(_ today:String, _ terms:[String], _ privacies:[String]) -> [Int] {
    var answer = [Int]()
    var date = getDate(today)
    var pass = [String: Int]()
    
    for i in 0..<terms.count {
        var temp = terms[i].split(separator: " ")
        pass[String(temp[0])] = Int(temp[1])
    }
    
    for i in 0..<privacies.count {
        var privacy = privacies[i].components(separatedBy: " ")
        var total = getDate(privacy[0])
        total += (pass[privacy[1]] ?? 0) * 28
        if(date >= total){
            answer.append(i + 1)
        }
    }
    
    return answer
}

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.