알고리즘 문제 풀기

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

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

문제 출처) 

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

 

프로그래머스

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

programmers.co.kr

문제 풀이 코드) 정확성 95% 

function solution(today, terms, privacies) {
    const answer = [];
    const [Y, M, D] = today.split('.').map(Number);
    let termsGraph = new Map();

    for (let i = 0; i < terms.length; i++) {
        const [alphabet, number] = terms[i].split(' ');
        termsGraph.set(alphabet, parseInt(number)); // 유효기간을 숫자로 변환하여 저장
    }

    for (let i = 0; i < privacies.length; i++) {
        const [day, alphabet] = privacies[i].split(' ');
        const [y, m, d] = day.split('.').map(Number);
        
        const number = termsGraph.get(alphabet);
        let newM = m + number;
        let newY = y;

        // 유효기간이 12개월을 초과하는 경우 연도를 조정
        if (newM > 12) {
            newY += Math.floor(newM / 12);
            newM = newM % 12;
        }

        // 유효기간이 지났는지 확인
        if (newY < Y || (newY === Y && newM < M) || (newY === Y && newM === M && d <= D)) {
            answer.push(i + 1); // 0이 아닌 1부터 시작하는 인덱스를 반환
        }
    }
    return answer;
}

 

수정 전 틀린 풀이 코드) 

function solution(today, terms, privacies) {
    var answer = [];
    const [Y, M, D] = today.split('.');
    let termsGraph = new Map();
    for(let i=0; i<terms.length; i++){
        const [alphabet, number]  = terms[i].split(' ')
       if(!termsGraph.has(alphabet))
        termsGraph.set(alphabet, number); //number가 string 타입으로 저장됨. 
    }

    for(let i=0; i<privacies.length; i++){
       const [day, alphabet] = privacies[i].split(' '); //둘다 string 타입
       let [y, m, d] = day.split('.').map(v => +v); //세개 다 number 타입 

        let number = Number(termsGraph.get(alphabet));
        let newM = m + number; 
        let newY = y; 
        console.log(newY, newM)
        if(newM > 12){
         newY +=  Math.floor(newM / 12);
         newM = newM - (12 * Math.floor(newM / 12) )
        }
        console.log(newY, newM, '2')
        const currentDate = `${Y}${M}${D}`; 
        if(newM < 10){
            newM = '0' + String(newM); 
        }
        if(d < 10){
            d = '0' + String(d);
        }
        const privacyDate = `${newY}${newM}${d}`
        console.log(currentDate)
        console.log(privacyDate)
        if(Number(privacyDate) > Number(currentDate)){
            answer.push(i)
          }
        }
    return answer;
}
반응형