[프로그래머스] 코딩테스트 연습 - 약수의 개수와 덧셈 (javascript)

지미노·2022년 9월 5일
0

코딩테스트

목록 보기
25/40
post-thumbnail

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

제한사항
1 ≤ left ≤ right ≤ 1,000

생각해본 풀이방법
1. for문을 통해서 left부터 right까지의 숫자를 배열에 넣어준다.
2. 배열 안에 있는 숫자들의 약수를 구하기 위해 포문을 또 돌려줘야할듯
3. 약수 자체가 필요한게 아니라 약수의 개수가 필요한거임.
count 가 짝수면 해당하는 인덱스의 숫자는 더하고
홀수면 빼게 삼항연산자를 또 걸어주는...휴 엄청 복잡하다
일단 함 식 써보면서 생각정리 해보겠음

  1. left~ right 식
let arr = []
for( left; left<=right; left++){
arr.push(left)
}
console.log(arr)

콘솔 찍어보니 잘 담겨있다.

이제
2. 배열 안에 있는 숫자들의 약수의 개수를 구해주기

let answer = 0
for (let i= 0; i<arr.length; i++){
  let count = 0
	for(let j= 1; j<=arr[i]; j++){
      if (arr[i]%j == 0){
        count++}
	}
  if (count%2==0){
    answer = answer + arr[i]
  } else {
    answer = answer - arr[i]
  }
}

휴;;;;; count 변수선언 이상한곳에 해서 누적 집계 돼서 애먹었다.........

걍 쓰다보니 줄줄 써져서 구구절절 포문 범벅 답안 완~

최종 답안

function solution(left, right) {
let answer = 0;
let arr = [];
for( left; left<=right; left++){
arr.push(left)
}
for (let i= 0; i<arr.length; i++){
   let count = 0 ;
	for(let j= 1; j<=arr[i]; j++){
      if (arr[i]%j == 0){
        count++} 
	}
  if (count%2==0){
    answer = answer + arr[i];
  } else {
    answer = answer - arr[i];
  }
}return answer;
}

1점.... 냠냠...

다른 사람 답안

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

제곱근이 정수면 약수의 개수가 홀수... 넵....

0개의 댓글