카카오 문제는 항상 잘 풀지 못해서 걱정했는데 오래걸렸지만 풀었다!
처음에는
class Solution {
fun solution(today: String, terms: Array<String>, privacies: Array<String>): IntArray {
val termsMap = mutableMapOf<String, Int>()
for (term in terms) {
val (type, validityPeriod) = term.split(" ")
termsMap[type] = validityPeriod.toInt()
}
val formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd")
val todayDate = LocalDate.parse(today, formatter)
val personalInformationToDestroy = mutableListOf<Int>()
for ((index, privacy) in privacies.withIndex()) {
val (dateString, type) = privacy.split(" ")
val privacyDate = LocalDate.parse(dateString, formatter)
val validityPeriod = termsMap[type] ?: 0
val expirationDate = privacyDate.plusMonths(validityPeriod.toLong())
if (todayDate.isAfter(expirationDate) || todayDate.isEqual(expirationDate)) {
personalInformationToDestroy.add(index + 1)
}
}
return personalInformationToDestroy.toIntArray()
}
}
이런 방식으로 풀었는데 코드가 너무 길어진것 같아서
다시 수정했다.
풀이 과정은 다음과 같다.
1. terms 배열을 map으로 바꾸기로 생각했다. 그렇게 하면 A = 6달로 연결되기 때문이었다.
그래서 다음과 같이 terms에서 map 함수를 이용해
각각의 요소들을 끄집어내고 해당 요소들은
["A 6", "B 12", "C 3"] 공백으로 구분되어있어서 split()함수를 이용해서 공백으로 나누고
0번째와 1번째를 연결시키기 위해 to를 사용하고 마지막으로 형이 map이기때문에 toMap()을 이용했다.
그 후 todayDate 변수를 만들어 today날짜 String타입을 DateTimeFormatter 을 이용해서 문제에서 제시한 날짜 패턴으로 바꿨다.
그 후 return 하려는 결과는 privacies 배열에서 파기해야할 개인정보의 번호를 오름차순으로 정수배열로 답해야하며
privacies[i]는 i+1번 개인정보의 수집일자와 약관 종류를 나타내어서
index+1한 결과를 되돌려주면 될것 같았다.
그래서 privacies를 순회하면서 해당 요소안에서 개인정보 수집날짜와 약관 종류가 주어지기때문에
각각을 더한 후 today와 비교하면 될것 같았다.
먼저 privacies는 ["2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"] 이런 형태로 주어져서
공백으로 쪼개기로 했다.
공백왼쪽(개인정보수집날짜)을 dateString에 담아두고 오른쪽(유효기간타입)을 type에 담아두었다.
이제 dateString은 String 타입을 DateTimeFormatter 을 이용해서 문제에서 제시하는 타입으로 변형했다.
그리고 privacyDate에서 유효기간을 더해야해서
방금 만든 termsMap을 이용해서 기간을 추출했다.
그 후 최종마감기일을 계산해야하는데 아래와 같이 작성했다.
그래서 expirationDate 와 todayDate를 비교해서 오늘날짜보다 이상이면 초과했기때문에 폐기해야하고
오늘날짜와 같아도 마가임일이기에 폐기해야한다
그래서 다음과 같이 작성했다.
결과는 정상적으로 통과되었다.
DateTimeFormatter을 어플 개발시 사용했던 기억이 있었는데 확실히 문제 풀때와 개발할때 사용하는 느낌이 많이 달랐고
코드를 줄이는 연습을 계속해서 해나가야할것 같다.
'TIL > kotlin 알고리즘' 카테고리의 다른 글
kotlin 프로그래머스 lv1 2022 KAKAO BLIND RECRUITMENT신고 결과 받기 (0) | 2024.02.26 |
---|---|
kotlin 프로그래머스 lv1 공원 산책 (0) | 2024.02.23 |
kotlin 프로그래머스 lv1 바탕화면 정리 (0) | 2024.02.21 |
kotlin 프로그래머스 lv1 성격 유형 검사하기 (0) | 2024.02.20 |
kotlin 프로그래머스 lv1 햄버거 만들기 (0) | 2024.02.19 |