Level1 - 개인정보 수집 유효기간
https://school.programmers.co.kr/learn/courses/30/lessons/150370?language=kotlin
나의 풀이
import java.time.LocalDate
class Solution {
fun solution(today: String, terms: Array<String>, privacies: Array<String>): IntArray {
var answer = arrayListOf<Int>()
val termsForEachAlphabet = mutableMapOf<String, Int>()
terms.forEach {
val (key, value) = it.split(" ")
termsForEachAlphabet[key] = value.toInt()
}
privacies.forEachIndexed { index, it ->
val (date, key) = it.split(" ")
val term = termsForEachAlphabet[key]!!
val (year, month, day) = date.split(".")
var addYear = term/12
var newMonth = month.toInt() + term%12
if (newMonth > 12) {
addYear++
newMonth -= 12
}
val newYear = year.toInt() + addYear
val formattedDate = formatDate(newYear, newMonth, day.toInt())
if (isDateBeforeOrEqual(formattedDate, today.replace(".","-")))
answer.add(index+1)
}
return answer.toIntArray()
}
fun formatDate(year: Int, month: Int, day: Int): String {
val formattedYear = year.toString()
val formattedMonth = if (month < 10) "0$month" else month.toString()
val formattedDay = if (day < 10) "0$day" else day.toString()
return "$formattedYear-$formattedMonth-$formattedDay"
}
fun isDateBeforeOrEqual(date1: String, date2: String): Boolean {
val localDate1 = LocalDate.parse(date1)
val localDate2 = LocalDate.parse(date2)
return localDate1.isBefore(localDate2) || localDate1.isEqual(localDate2)
}
}
- 각 약관 종류 별로 유효기간을 담는 map을 만든다. (termsForEachAlphabet)
- 개인정보 수집 일자에서 유효기간만큼 더해서 현재 날짜와 비교한다.
- 유효기간%12 를 해서 월수를 더한다. 이 값이 12보다 클 경우 year를 하나 더 더한다.
- 뮤효기간/12 를 해서 년수를 더한다.
- 현재 날짜와 비교하여 유효기간이 지나면 폐기한다.
Comment
28일이 함정인 문제였다. DateFormat을 사용하면 28일 조건에 걸려서 해결이 안된다.
하지만 내가 사용한 방법은 month를 기준으로 계산하기 때문에 28일 조건과 관련이 없다.
그래서 헤매지 않고 바로 정답에 도달할 수 있었다.
'프로그래머스 > Kotlin | Level1' 카테고리의 다른 글
[프로그래머스/Kotlin]Lv1 - 명예의 전당(1) (0) | 2024.07.11 |
---|---|
[프로그래머스/Kotlin]Level 1 - 옹알이 (2) (0) | 2024.05.09 |
[프로그래머스/Kotlin]Lv1 - 신고 결과 받기 (0) | 2023.06.10 |
[프로그래머스/Kotlin]Level1 - 소수 만들기 (0) | 2023.02.23 |
[프로그래머스/Kotlin]Level1 - 모의고사 (0) | 2023.02.23 |