2023. 1. 21. 18:39ㆍ알고리즘/문제
https://school.programmers.co.kr/learn/courses/30/lessons/150370
1. 첫 번째 풀이 생각
- privacies의 month에 약관의 유효 month( terms의 달 )을 더해서 >12월 이상이면 year에 1을 더하고 각 year month day를 int로 바꿔서 today랑 비교.
만약 수집일자+유효 month 보다 오늘의 날짜가 더 크거나 같으면 list 선언한 것에 index 값 add
실패 이유
1. 어디서 오류가 발생했는데 정확하게 모르겠다. if로 분기를 나누어서 복잡해짐.
2. 개인정보 수집일자 + 유효기간 보다 하루 적은 날까지가 보관 가능한 날이다.
오늘날짜보다 수집일자+유효기간을 해서
2022.02.19 + 03m = 2022.05.19 ( 2022.05.18일까지 보관 가능) <= 2022.05.19 폐기
2022.02.20 + 03m = 2022.05.20 ( 2022.05.19일까지 보관 가능) > 2022.05.19 x
이건 맞는 것 같다. 하지만 -1이라는 상황이 모든 케이스에서 맞는지 정확히 판단 불가
2. 두 번째 풀이 생각
- 각 년 월 일을 전부 day로 바꾸어 생각 이렇게 하면 string을 int로 바꿨다가 다시 string으로 바꾸는 일이 안 생김
- today의 날짜를 (year*12+month)*28+day로 변경
- privacies의 날짜들도 전부 변경
- privacies의 유효기간도 변경, terms의 유효기간도 *28 해서 계산
- 마지막에 -1
그리고 possibleDD를 보관 가능한 날짜로, todayDD를 오늘날짜로 해서
possibleDD < todayDD 이면 list에 index 저장
- 성공
class Solution {
fun solution(today: String, terms: Array<String>, privacies: Array<String>): IntArray {
var answer: IntArray = intArrayOf()
val list = mutableListOf<Int>()
val todayDD = (today.split(".")[0].toInt()*12+today.split(".")[1].toInt())*28+today.split(".")[2].toInt()
privacies.map{it}.forEachIndexed { index , str ->
val plusMM = terms.map {it.split(" ")}.find {
it[0] == str.filter{it.isUpperCase()}
}!![1].toInt()*28
val mm = str.filterNot { it.isUpperCase() }.trim().split(".")
val possibleDD = (mm[0].toInt()*12+mm[1].toInt())*28+mm[2].toInt()+plusMM-1
if(possibleDD < todayDD) list.add(index+1)
}
answer = list.toIntArray()
return answer
}
}
- 개선해야 하는 것
코드가 반복문을 돌리고 밖에 list에 index를 더하는 모양임. 함수형 프로그래밍이 아님
코틀린의 활용을 잘하지 못했다 생각.
결과가 바로 나올 수 있게 할 수 있겠다 싶다.
'알고리즘 > 문제' 카테고리의 다른 글
프로그래머스 알고리즘 Level1 코틀린 명예의 전당 (0) | 2023.01.22 |
---|---|
프로그래머스 알고리즘 Level 1 코틀린 가장 가까운 글자 (0) | 2023.01.22 |
프로그래머스 알고리즘 Level1 코틀린 크기가 작은 부분문자열 (0) | 2023.01.21 |
프로그래머스 입문 알고리즘 문제 정리 - 코틀린(Kotlin) (0) | 2023.01.21 |
알고리즘 입문 문제 1일차 & 2일차 (0) | 2023.01.02 |