프로그래머스 코딩 문제 2021/05/24 - Lv.1 약수의 개수와 덧셈

이호현·2021년 5월 24일
0

Algorithm

목록 보기
120/138

[문제]

두 정수 leftright가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ leftright ≤ 1,000

입출력 예

left right result
13 17 43
24 27 52

입출력 예 설명

입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.

    약수 약수의 개수
    13 1, 13 2
    14 1, 2, 7, 14 4
    15 1, 3, 5, 15 4
    16 1, 2, 4, 8, 16 5
    17 1, 17 2
  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2

  • 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.

    약수 약수의 개수
    24 1, 2, 3, 4, 6, 8, 12, 24 8
    25 1, 5, 15 3
    26 1, 2, 13, 26 4
    27 1, 3, 9, 27 4
  • 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

[풀이]

function solution(left, right) {
  let answer = 0;
   
  for(let i = left; i <= right; i++) {
    let temp = 0;
       
    for(let j = 1; j <= (i / 2); j++) {
      if(!(i % j)) {
        temp++;
      }
    }
       
    answer = temp % 2 ? answer + i : answer - i;
  }
   
  return answer;
}

바깥쪽에는 주어진 범위안의 숫자들을 돌게 하고, 안쪽에는 바깥쪽 숫자를 나눌 수들을 돌게 함.

안쪽 반복문의 반복 범위를 반까지만 돌게 하고, 약수의 값이 홀수가 나오면 자기자신을 더해서 짝수개가 되고, 약수의 값이 짝수가 나오면 자기자신을 더해 홀수개가 된다.

마지막에 약수 개수가 홀수냐 짝수냐에 따라 더하고 빼주면 됨.

profile
평생 개발자로 살고싶습니다

0개의 댓글