코테
Lev.1 프로그래머스 약수의 개수와 덧셈
sungtt
2023. 3. 20. 16:11
프로그래머스 [약수의 개수와 덧셈]
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ left ≤ right ≤ 1,000
직접 풀이 결과
function solution(left, right) {
var answer = 0;
let length = right - left + 1;
let numberList = Array.from({length:length},(v,i) => left+i); // [13,14,15,16,17]
let count = numberList.map((num,idx) => {
let 갯수 = 0;
for(let i = 1 ; i <= num ; i++){
if(num % i === 0) 갯수++;
}
갯수%2===0 ? answer+=numberList[idx] : answer-=numberList[idx]
})
return answer;
}
Array.from을 사용하여 약수의 개수를 구해야할 숫자목록을 생성했다.
이 목록을 순회하며 각 요소의 약수의 갯수를 구한 뒤 갯수가 홀,짝수냐에 따라
answer에 값을 더해주고 빼준다.
중간중간 방식을 바꿔서 시도하다보니 불필요한 메소드가 사용된것이 보인다.
배열을 반환해주는 map은 굳이 필요없고 forEach로도 순회하기에 충분할것이다.
약수 구하는 방식을 더 빠르게 할 수 있을것같다.
참고 풀이 결과 - 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;
}
제한사항에 따라서 반복문 조건으로 잘 넣기만 한다면 위에처럼 굳이 배열을 만들지않아도 각 숫자별로 순회할 수 있었다.
Number.isInterger는 인수가 정수인지 확인하여 true / false를 반환해준다.
Math.sqrt는 인수의 제곱근을 반환해준다.
인수의 제곱근이 정수일 경우 약수의 갯수가 홀수기때문에 뺄셈을,
정수가 아닐 경우 짝수기때문에 덧셈을 실행해준다.
멋있는 코드인거같다!