TIL_프로그래머스 - Lv1. 약수의 개수와 덧셈

정윤숙·2023년 6월 17일
0

TIL

목록 보기
171/192
post-thumbnail

📒 오늘의 공부

1. 프로그래머스

Lv1. 약수의 개수와 덧셈

나의 풀이

const solution=(left, right)=> {
    const numArr = []; // left~right 배열
    let divisionArr = []; // 각 정수의 약수를 담은 배열
    let plusNum = 0; // 약수가 짝수 일 때
    let minusNum = 0; // 약수가 홀수 일 때

    for(let i=left; i<=right; i++ ){
        numArr.push(i)
    }

    for(let i=0; i<numArr.length; i++){
        let division = [];
        for(let j=1; j<=numArr[i]; j++){
            if(numArr[i]%j === 0){
                division.push(j)
            }
        }
        divisionArr.push(division)
    }

    for(let i=0; i<divisionArr.length; i++){
        if(divisionArr[i].length%2 === 0){
            plusNum += divisionArr[i][divisionArr[i].length-1]
        }
        else{
            minusNum += -divisionArr[i][divisionArr[i].length-1]
        }
    }
    return plusNum + minusNum
}

다른 풀이

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()

  • 주어진 값이 정수인지 여부를 확인
  • true, false 반환

Math.sqrt()

  • 주어진 숫자의 제곱근을 반환
  • 인자 = 양수 또는 0
    • Math.sqrt(9) // 3을 반환

약수

  const divisors = [];

  for (let i = 1; i <= Math.floor(number / 2); i++) {
    if (number % i === 0) {
      divisors.push(i);
    }
  }

divisors.push(number); // 주어진 숫자 자체도 약수이므로 추가
  • 약수 구할 때 Math.floor(number / 2)하는 이유
    • 주어진 숫자의 절반 이상으로 나누어 떨어지는 경우는 발생하지 않기 때문에 불필요한 반복을 줄이기 위해 2로 나눈 정수 반환
profile
프론트엔드 개발자

0개의 댓글