공통된 문제 하나씩 풀어와서 서로 설명해주는 오프라인 스터디

문제 풀이 의식의 흐름

먼저 left와 right의 약수의 개수를 구해야하고, 개수가 짝수이면 더하고 홀수이면 빼야한다

 

// 석우님의 풀이
function solution(left, right) {
    
    // 주어진 숫자의 약수를 구해 반환하는 함수
    function 약수(num) {
        const result = [];
        for (let i = 1; i <= num; i++) {
            if(num % i === 0) {
                result.push(i);
            }
        }
        return result;
    }
    
    // left부터 right까지의 숫자 생성
    const 대상 = new Array(right - left + 1).fill().map((number, index) => left + index);
    
    console.log(대상)
    return 대상.reduce((acc, number) => {
        if (약수(number).length % 2 === 0) {
            acc += number;
        } else {
            acc -= number;
        }
        return acc;
    }, 0);
}
// 성진님의 풀이
function solution(left, right) {
    var answer = 0;

    function divisorNum (n){
        let num = 0; 
        for(let i=1; i<= Math.sqrt(n); i++){
            if(n % i === 0 && i === Math.sqrt(n)){
                num += 1
            }
            else if(n % i ===0){
                num += 2
            }
        }
        return num;
    }
    ///// 약수 구해주는 함수 끝          


    for(let i= left; i<= right; i++){
        if(divisorNum(i) % 2 === 0) answer += i
        else if(divisorNum(i) % 2 !== 0) answer -= i
    }
    

    return answer;
}
// 도영님의 풀이
function solution(left, right) {
    var answer = 0;
    const num = right - left + 1 //갯수
    let cnt = 0; //약수의 갯수
    
    for(let i = 0; i < num ; i++){
        for(let j = 1; j <= left; j++){
            if(left % j === 0){
                cnt++ 
            } //left에서 약수의 갯수를 계산
        }
        //약수에 갯수에 따라서 덧셈, 뺄셈을 진행
        cnt % 2 === 0 ? answer += left : answer -= left
        
        //다음 값을 탐색하기 위해 left에 1을 더하고, cnt를 0으로 초기화
        left++
        cnt = 0
    }
    return answer;
}
// 윤정님의 풀이
function solution(left,right){
            let sum = 0;
            for(i=left;i<=right;i++){
            let count=0;
            for(j=1;j<=i;j++){
                if(i%j===0){
                    count++
                }
            }
            if(count%2===0){
                sum += i;
            }else{
                sum-=i;
            }
        }
            return sum
        }
// 민승님의 풀이
function solution(left,right){
var answer = 0;
    for(let i=left;i<=right;i++){
        let count = 0;
        for(let j=1;j<=i;j++){
            if (i%j ===0){
            count++
            } 
        } count%2===0?answer+=i:answer-=i;     

    }

    return answer

+ Recent posts