알고리즘 문제 풀기

프로그래머스 : 개인정보 수집 유효기간 - javascript(구현)

Fo_rdang 2024. 3. 14. 21:17
반응형

문제 출처) 

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

 

프로그래머스

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

programmers.co.kr

 

정답코드 1

 

 solution(today, terms, privacies) {
    let results = []; 
    let map = new Map()
    for(let term of terms){
      let [type, num] = term.split(' '); 
      map.set(type, num)
    }
    for(let i=0; i<privacies.length; i++){
        let [dates, type] = privacies[i].split(' ')
        let num = map.get(type)
        let res = cal(today, dates, num)
        if(res) results.push(i+1)
    }
    return results; 

    function cal(today, dates, num){ 
        let [y, m, d] = dates.split('.').map(v => +v)
        m += Number(num)
        if(m > 12){
            y += Math.floor((m - 1)/12) 
            m = (m-1) % 12 + 1
        }
        d -= 1 
        if(d === 0){
            if(m === 1){
                y -= 1; 
                m = 12 
                d = 28
            }else{
                 m -= 1 
                 d = 28    
            }
        }
        let temp = String(y).padStart(4, '0') + String(m).padStart(2, '0') + String(d).padStart(2, '0')
        let today_date = Number(today.split('.').join(''))
        let versus_date = Number(temp)
        
        if (versus_date < today_date) return true; 
        else return false; 
    }
}

 

정답코드 2

 

new Date를 활용한 코드인데, 

유효기간이 달 기준이기 때문에 

중간에 모든 달은 28일까지라는 문구를 무시해도 된다고 한다. 

이해가 안가서 일단 코드만 작성해봤다. 

function solution(today, terms, privacies) {
    const answer = []; 
    const expire = new Date(today)
    console.log(expire)
    const termType = {}; 
    terms.forEach((item) => {
        const [type, term] = item.split(' '); 
        termType[type] = Number(term); 
    }); 
    
    privacies.forEach((item, idx) => {
        const [date, type] = item.split(' ')
        const chDate = new Date(date)
        
        chDate.setMonth(chDate.getMonth() + termType[type])
        
        if(chDate <= expire) answer.push(idx + 1); 
    })
    return answer; 
}

 

반응형