본문 바로가기

자료구조알고리즘/프로그래머스

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

[ 문제 ]

위 입출력 예시로 설명을 하자면, left는 13, right는 17이고 13부터 17까지의 모든 수 중, 약수의 개수가 짝수인 13, 14, 15, 17은 더하고 약수의 개수가 홀수인 16은 뺀 값을 return 하는 것입니다. 

 

 

 

[ 풀이 ]

제가 작성한 로직은 아래와 같습니다.

 

1/ 먼저 약수의 개수를 구하는 함수를 만듭니다.

2/ left부터 right까지 반복문을 이용해 1번에서 만든 약수의 개수를 구하는 함수로 약수의 개수가 짝수인지 홀수인지 구분합니다.

3/ 짝수이면 +, 홀수이면 -를 하여 최종 값을 return 합니다.

 

 

 

1/ 먼저 약수의 개수를 구하는 함수를 만듭니다.

 let divisor = function(num){
     let count = 0; //먼저 count라는 변수에 0을 할당해줍니다.
     for(let j = 1; j <= num; j++){ //매개변수를 1부터 매개변수까지 하나하나 나누어서 
         if(num % j === 0){ //나누어떨어지면 약수이기 때문에 
             count++; //count를 1씩 추가합니다.
         }
     }
     return count; //count값은 결국 약수의 개수가 되지요.
 }

 

 

2/ left부터 right까지 반복문을 이용해 1번에서 만든 약수의 개수를 구하는 함수로 약수의 개수가 짝수인지 홀수인지 구분합니다.

3/ 짝수이면 +, 홀수이면 -를 하여 최종 값을 return 합니다.

function solution(left, right) {
//약수의 개수를 구하는 함수
 let divisor = function(num){
     let count = 0;
     for(let j = 1; j <= num; j++){
         if(num % j === 0){
             count++
         }
     }
     return count;
 }
 
 let result = 0; //result값을 먼저 0으로 할당해줍니다.
 for(let i = left; i <= right; i++){ //매개변수 left부터 right까지 반복문을 이용하여
     if(divisor(i) % 2=== 0){ //약수의 개수가 2로 나누어 떨어지면(즉, 짝수이면!)
         result = result + i //result값에 i를 더합니다.
     } else { //만약 약수의 개수가 2로 나누어 떨어지지않으면(즉, 홀수이면!)
         result = result - i; //기존 result값에 i를 뺍니다.
     }
 }
    return result; //최종적으로 result값을 반환합니다.
 

}

 

 

 

프로젝트도 마무리 되었으니, 이제 다시 코딩테스트 대비 문제를 적어도 하루에 한 문제씩 꾸준히 풀어봐야지! :)