프로그래머스 알고리즘 Level1 코틀린 2023 KAKAO BLIND RECRUITMENT 개인정보 수집 유효 기간

2023. 1. 21. 18:39알고리즘/문제

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

 

프로그래머스

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

programmers.co.kr

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를 더하는 모양임. 함수형 프로그래밍이 아님 

코틀린의 활용을 잘하지 못했다 생각.

결과가 바로 나올 수 있게 할 수 있겠다 싶다.