[Kotlin/프로그래머스] 코딩테스트 연습 > 2023 KAKAO BLIND RECRUITMENT > 개인정보 수집 유효기간

👀 문제

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

👊 도전

1. 설계

  1. 문제 설명대로 구현

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
fun solution(today: String, terms: Array<String>, privacies: Array<String>): IntArray {
    var answer = mutableListOf<Int>()
    
    val hashmap = hashMapOf<String, Int>()
    terms.forEach { term ->
        val split = term.split(" ")
        val day = split[1].toInt() * 28
        hashmap.put(split[0], day)
    }

    val todaySplit = today.split(".")
    var todayDay: Long = todaySplit[2].toLong()
    todayDay += (todaySplit[1].toInt() - 1) * 28
    todayDay += (todaySplit[0].toInt() * (12 * 28))
    privacies.forEachIndexed { index, privacy ->
        val split = privacy.split(" ")
        val endDay = hashmap[split[1]] ?: 0
        val date = split[0].split(".")
        var day = date[2].toLong()
        day += (date[1].toInt() - 1) * 28
        day += (date[0].toInt() * (28 * 12))
        if (day + endDay <= (todayDay)) {
            answer.add(index + 1)
        }
    }

    return answer.toIntArray()
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 날짜를 일자로 변환하여 대소 비교한다
    • YYYY.MM.DD 형태로 비교하기 어렵기 때문에 일자로 변환한 후 계산한다.
    • YYYY1228 + (MM-1)*28+ DD로 계산하면 된다.

👏 해결 완료!