[Javascript] 약수의 개수 덧셈
2022. 2. 1. 16:11
728x90
반응형
문제 설명
두 정수 left와 right가 매개변수로 주어집니다.
left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한 사항)
- 1 ≤ left ≤ right ≤ 1,000
입출력 예 )
left | right | result |
13 | 17 | 43 |
24 | 27 | 52 |
정답 코드
/**
*
* @param left: 시작
* @param right: 마지막
* @returns {number}
* 약수의 개수: 짝수 -> + , 홀수 -> -
*/
function solution(left, right) {
return divisor(number(left,right));
}
function number(left,right){
let num = [];
for(let i = left; i <= right; i++){
num.push(i);
}
return num;
}
function divisor(arr) {
let result = 0;
let resultCount = [];
// 배열에 담겨있는 수의 약수를 구한다.
// 이때, 약수의 개수가 짝수일 경우 result 변수에 해당 배열의 수를 더하고
// 약수의 개수가 홀수일 경우 result 변수에 해당 배열의 수를 뺀다.
for(let i = 0; i < arr.length; i++){
let cnt = 0;
for(let j = 1; j <= arr[i]; j++){
if(arr[i] % j === 0){
cnt++;
}
}
resultCount.push(cnt);
if(resultCount.pop() % 2 === 0){
result += arr[i];
} else {
result -= arr[i];
}
}
return result;
}
그냥 숫자 배열을 따로 만들어서 처리했는데
하고나서 보니 굳이 저렇게 할 필요가 있을까 싶다..
다른 사람 풀이 1.
function solution2(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;
}
- Math.sqrt()
내가 작성한 풀이는 다 분리해서 사용한다고 생각해서 다 나눠놨다.
근데 이 풀이를 보고 내가 작성했던 코드는 무엇인가...라는 생각이 많이 들었다..
( 이렇게 짧아지는 코드를 내꺼는 왜이렇게 길지..?? )
여기서 sqrt() 함수를 처음 접했다..
다른 사람 풀이 2.
function solution3(left, right) {
let answer = 0;
for (let i = left; i <= right; i++) {
let count = 0;
for (let j = 1; j <= i; j++) {
if (i % j === 0) count++;
}
if (count % 2) answer -= i;
else answer += i;
}
return answer;
}
728x90
반응형
'CS > 알고리즘' 카테고리의 다른 글
[Javascript] 2016년 (0) | 2022.02.26 |
---|---|
[Javascript] 예산 (0) | 2022.02.19 |
[Javascript] 3진법 뒤집기 (0) | 2022.02.01 |
[Javascript] 실패율 (0) | 2022.01.17 |
[Java] 오름차순, 내림차순 알고리즘 (0) | 2021.09.07 |