본문 바로가기

항해99_10기/[2주차] 알고리즘 문제풀이

[25번][중급] 약수의 개수와 덧셈

 

프로그래머스

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

programmers.co.kr

 

 

나의 답

[pseudo code]
1. 입력받은 range의 시작과 끝을 사용해 for loop 생성
2. odd & even = [] 약수의 개수가 홀/짝인 숫자를 각각 담아줌
3. num arr의 요소를 하나씩 인자로 받아서, 해당 숫자의 약수를 뽑아줄 countFactor(num)을 생성
    - count 변수를 선언하고, 아래 판별식에 따라 숫자를 올려줌 
    - 1 ~ num까지 for loop 생성
    - num % i === 0일 경우, count++ 
    - return count
4. 만약, countFactor()함수의 리턴 값이 홀/짝수면 i를 odd/even에 푸쉬 
5. answer = even.reduce() - odd.reduce() 값을 리턴해줌

 

function solution(left, right) {
  let odd = [],
    even = [];

  for (let i = left; i <= right; i++) {
    if (countFactor(i)) even.push(i);
    else odd.push(i);
  }
  console.log(odd, even);
  return (
    even.reduce((acc, curr) => curr + acc, 0) -
    odd.reduce((acc, curr) => curr + acc, 0)
  );
}

function countFactor(num) {
  let count = 0;
  for (let i = 1; i <= num; i++) {
    if (num % i === 0) count++;
  }
  if (count % 2 === 0) {
    return true;
  } else {
    return false;
  }
}

console.log(solution(13, 17)); // 43
console.log(solution(24, 27)); // 52

 

 

인상적은 다른 사람의 답

로직 : 정수의 제곱근이 정수면 약수의 개수가 홀수임을 이용

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;
}