[ 문제 ]
위 입출력 예시로 설명을 하자면, 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값을 반환합니다.
}
프로젝트도 마무리 되었으니, 이제 다시 코딩테스트 대비 문제를 적어도 하루에 한 문제씩 꾸준히 풀어봐야지! :)
'자료구조알고리즘 > 프로그래머스' 카테고리의 다른 글
약수의 개수 구하는 방법 (0) | 2023.12.13 |
---|---|
[프로그래머스] 다항식 더하기 (0) | 2023.06.01 |
[프로그래머스] 소수 만들기 (0) | 2022.01.26 |