TIL19-01 약수의 개수, Math.sqrt() 제곱근의 활용

김태혁·2023년 1월 31일
0

TIL

목록 보기
66/205
  • 문제 설명
    약수의 개수와 덧셈
    두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
  • 풀이 과정
    • 주어진 수의 범위 안에 있는 모든 수의 약수를 구해야한다.
    • 주어진 수마다 약수의 개수를 카운트한다.
    • 카운트 된 약수의 개수의 짝,홀을 구분하고
    • 짝,홀의 따라 각 수를 + , - 를 해야한다.
  • 완성 코드
function solution(left, right) {
    let arr = [];
    for (let i = left; i <=right; i++) {
        let count = 0;  // 약수개수 카운트 초기값 선언
        for (let j = 1; j <= i; j++) {
            if( i%j ===0 ) { //left(i) 의 값과 나눴을 때 나머지가 없는게 약수이므로 
                count++;     // 그럴때마다 카운트            
            }                            
        }arr.push(count); //카운트값을 배열에 집어 넣는다. 
    }
    let arr3 = [];
    for (let i = 0; i< arr.length; i++ ) {//위의 배열을 짝 홀로 구분 짓기 위해
        if( arr[i]% 2 === 0) {    // 짝,홀 배열을 만든다.           
            arr3.push("짝");
        } else {
            arr3.push("홀");
        }
    }   
    let arr4 = [];
    for (let i =left; i <=right; i++) {
        arr4.push(i);    //left,rigth 값 배열을 만든다.
    }
    let arr5 = [];
    for (let i = 0 ; i <arr3.length; i++ ) {
        if( arr3[i] == "짝") {   // 각 배열의 값을 짝,홀인지 비교 후 홀이면 마이너스로 반환한다.
            arr5.push(arr4[i]);
        } else {
            arr5.push(-arr4[i]);
        }
    }
    return arr5.reduce((a,b) => a+b, 0) //마지막으로 모든 원소를 더한다. 
}
  • 다른사람의 풀이
    • Math.sqrt() 제곱근을 활용해 간단히 해결했다.
    • isInteger()를 활용해 제곱근이 정수면, 약수의 갯수가 홀수임을 이용했다.
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;
}
profile
도전을 즐기는 자

0개의 댓글