본문 바로가기

코딩테스트

[프로그래머스] 약수의 개수와 덧셈

문제 설명

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

 

제한사항

  • 1 ≤ left  right ≤ 1,000

나의 풀이 :

function solution(left, right) {
    var answer = 0;
    let array = [];
    let numOfDivisor = 0;
    let numArray = [];
    
    for ( let i = left; i < right+1 ; i++){
        array.push(i) // left부터 right까지의 수를 배열로 구하기. 
    }
    array.forEach((num,index) => {
      numOfDivisor = 0 //매번 약수의 갯수를 초기화하기.
      numArray = []; // 매번 0-num까지의 수 초기화하기. 
      for( let nums = 1; nums < num+1; nums++){
        numArray.push(nums)
        
      }
      numArray.forEach((cur)=>{
        if(num%cur == 0){ //1부터 num까지 약수인경우를 확인.
          numOfDivisor ++; //약수일 경우마다 1씩 더하기
        }
      })
      numOfDivisor % 2 == 0 ? array[index] = num : array[index] = -num
      //약수의 갯수가 짝수이면 그냥 넣고, 홀수이면 마이너스를 붙여서 넣기 
    })
        
    return answer = array.reduce((a,b)=> a+b,0);
}

내가 문제를 풀었던 프로세스 : 

 

1) left부터 right까지의 수를 배열로 구하기 :

-> for ( let i = left; i < right+1 ; i++){
        array.push(i) 
    }

 

2)left부터 right까지의 수가 들어간 배열 array에 있는 각 수마다 계산을 해주기 :

->array.forEach((num,index) => {}

 

3)각 수에 대하여 1부터 num까지의 수가 들어간 배열을 만들기 : 

-> numArray = []; // 매번 0-num까지의 수 초기화하기. 
      for( let nums = 1; nums < num+1; nums++){
        numArray.push(nums)
      }

-> num이 13일 경우 1부터 13까지의 수가 차례대로 배열로 만들어짐 

 

4)1부터 num까지의 수 중에서 약수인 수를 구하기 (약수를 구하는 방법은 나눴을때 나머지가 0인 수가 있으면 그 수는 약수이다) :

-> numArray.forEach((cur)=>{
        if(num%cur == 0){ //1부터 num까지 약수인경우를 확인.
          numOfDivisor ++; //약수일 경우마다 1씩 더하기
        }
      })

 

5)약수일때마다 numOfDivisor변수의 갯수를 +1씩 해줬으므로, 약수의 갯수가 구해졌다. 이제는 약수가 짝수인지, 홀수인지 판단한 다음,본래의 array 배열에 짝수일 경우 +로 홀수 일 경우 -를 붙여서 다시 넣어준다. 

->numOfDivisor % 2 == 0 ? array[index] = num : array[index] = -num
      //약수의 갯수가 짝수이면 그냥 넣고, 홀수이면 마이너스를 붙여서 넣기 
    })

 

6)array안에 있는 모든 배열의 수를 합해주기 :

-> return answer = array.reduce((a,b)=> a+b,0);

 

 

'코딩테스트' 카테고리의 다른 글

[백준]단어공부  (0) 2021.06.14
[백준] 더하기 사이클  (0) 2021.06.14
[프로그래머스] 다트게임  (0) 2021.05.27
[프로그래머스] 두 개 뽑아서 더하기  (0) 2021.05.25
[프로그래머스] 키패드 누르기  (0) 2021.05.22