프로그래머스 : 약수의 개수와 덧셈 (level 1)

김진권·2021년 7월 22일

algorithm

목록 보기
2/10

<문제>

스크린샷 1스크린샷 2


1. 나의 풀이

function solution(left, right) {
    let answer = 0;
    let numbers = [];
    const squareNumber = [];

    for(let i=0; i<right-left+1; i++) {
        numbers[i] = left + i;
    }

    for(let i=0; i<31; i++) {
        squareNumber[i] = (i+1)*(i+1);
    }

    answer = numbers.reduce(function(acc,cur,i) {
        if(squareNumber.includes(cur)) return acc-cur;
        return acc+cur;
    },0)

    return answer;
}

✳️ 풀이 과정 :
(제곱수만 약수가 홀수개라는 것을 이용했다.)

1️⃣ for문을 이용해 계산해야할 수들을 numbers 배열에 넣어준다.
2️⃣ for문을 이용해 제한사항인 1000사이의 제곱수들을 squareNumber 배열에 넣어준다. (이건 아마 제한사항이 없었다면 코드르 이렇게 쓰기 힘들었을듯)
3️⃣ reduce를 활용해 제곱수라면 빼주고 아니라면 더해준다.


2. 고수의 풀이

function solution(left, right) {
    var answer = 0;
    for (let i = left; i <= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}

✳️ 풀이 과정 :
(Number.isInteger()메서드 : 주어진 값이 정수인지 아닌지 판별함.)
(Math.sqrt()메서드 : 주어진 값의 제곱근을 반환함.)


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

profile
start!

0개의 댓글