본문 바로가기
Problem Solving

[Swift] 프로그래머스 개인정보 수집 유효기간(lv. 1)

by DuncanKim 2023. 2. 24.
728x90

[Swift] 프로그래머스 개인정보 수집 유효기간(lv. 1)

 

1. 문제

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

 

프로그래머스

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

programmers.co.kr

 

2. 접근

Swift 기준으로 가장 최근에 나온 lv. 1 문제이다. 2023 카카오 블라인드 채용 문제로 등장한 문제이다.

날짜 처리가 관건일 줄 알았는데, 그건 아니었고, 모든 달이 28일로 되어 있다고 가정을 하는 바람에 문제가 좀 더 쉬워졌다.

문자열을 마침표를 기준으로 분해하고, 오늘을 기준으로 문서 작성일로부터 보관 기한을 더하면 그것이 몇일인지 파악하고, 오늘과 비교하여 파기해야 하는 것인지 아닌지를 리턴해주면 된다.

 

두 번째 반복문에서 무엇을 분할하고, 디데이를 계산하여 오늘과 비교를 하는 로직을 볼 수 있다. 만약 지워야 한다면, 그 지워야 하는 문서의 index + 1을 하여 몇 번째 문서를 삭제해야 하는지를 저장하였다. 마지막에는 needToRemove 배열을 sorted() 해주면서 마무리하였다.

 

3. 코드

import Foundation

func solution(_ today:String, _ terms:[String], _ privacies:[String]) -> [Int] {
    var needToRemove = [Int]()
    var time: Dictionary = [String : Int]()
    for i in terms {
        time[String(i.split(separator: " ")[0])] = Int(i.split(separator: " ")[1])
    }
    let todayArray = today.split(separator: ".").compactMap({ Int($0) })
    let today = todayArray[0] * (28 * 12) + todayArray[1] * (28) + todayArray[2]
    for (index, i) in privacies.enumerated() {
        let tempArray = i.split(separator: " ")
        let dDayArray = tempArray[0].split(separator: ".").compactMap({ Int($0) })
        let dDay = dDayArray[0] * (28 * 12) + dDayArray[1] * 28 + dDayArray[2]
        
        if dDay + time[String(tempArray[1])]! * 28 <= today {
            needToRemove.append(index + 1)
        }
    }
    return needToRemove.sorted()
}
728x90

댓글