220331 다른 사람의 풀이

프로그래머스 77884번 문제


내 풀이

function solution(left, right) {
  let arr = [];
  let numArr = [...Array(right - left + 1).keys()].map((key) => key + left);
  for (let i = left; i <= right; i++) {
    count = 0;
    for (let j = 1; j <= i; j++) {
      if (i % j == 0) {
        count += 1;
      }
    }
    arr.push(count);
  }

  for (let i = 0; i < arr.length; i++) {
    if (arr[i] % 2 != 0) {
      numArr[i] = -numArr[i];
    }
  }
  return numArr.reduce((tot, cur) => (tot += cur), 0);
}
  1. left와 right로 받은 수를 배열로 만들었다
  2. 이중 반복문으로 약수가 나온다면 count에 +1을 해줘서 갯수를 파악했다
  3. 그 count를 arr라는 빈 배열에 넣어주었다
  4. 다음 반복문으로 조건문을 사용하여 arr 배열의 요소를 2로 나눴을 때, 0이 아니라면 홀수라는 의미이기 때문에 음수로 바꿔줬다
  5. reduce 함수로 다 더해줬다

다른 사람의 풀이

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

좋은 웹페이지 즐겨찾기