코딩테스트/LV. 1

LV. 1 :: 약수의 개수와 덧셈

KUROMI98 2023. 1. 29. 05:29

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

 

프로그래머스

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

programmers.co.kr

 

function solution(left, right) 
{
    var yaksu = [];
    var num = 0;
    
    for (j=left; j<=right; j++)
    {
        for (i=1; i<=j; i++)
        {
            if (j%i==0) {yaksu.push(i); num++;}
            // n이 i로 나눠떨어진다면 i를 answer에다가 집어넣어준다.
        }
        yaksu.push(0);
    }
    // yaksu 는 [1,13,0,1,2,7,14,0,1,3,5,15,0,1,2,4,8,16,0,1,17,0]
    
    // -------------------------------------------------------------
    
    var plussum = 0;
    var minussum = 0;
    
    num = 0; // num을 초기화해준다.
    
    for (i=0; i<yaksu.length; i++)
    { // yaksu의 전체 원소에 대하여
        num += 1; // num에 1을 더해준다
        if (yaksu[i] == 0) // 만약에 0을 마주한다면
        {   
            if ((num-1)%2==0) plussum += yaksu[i-1]; 
            // num-1이 짝수일 경우 0 직전의 원소를 plussum에 넣어준다.
            // (왜 num-1이냐면 0을 만나면서 num에 1이 더해졌기 때문)
            
            else minussum += yaksu[i-1];
            // num-1이 홀수일 경우 0 직전의 원소를 minussum에 넣어준다.
            
            num = 0;
            // 다시 num을 0으로 초기화해준다.
        }
    }
    
    return plussum - minussum;
}

241021

function solution(left, right) {
    let arr = [];
    for (i=left; i<=right; i++){
        if (yaksuCount(i).length % 2 ==0){ arr.push(i) }
        else { arr.push(-i) }
    }
    return arr.reduce((a,b)=>a+b, 0)
}

let yaksuCount = (n) => {
    let yaksuArray = [];
    for (j=1; j<=n; j++) {
        if (n%j==0){
            yaksuArray.push(j)
        }
    }
    return yaksuArray;
}