728x90
문제
내가 짠 코드
function solution(left, right) {
var 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 == 0){
answer +=i;
}
else{
answer -= i;
}
}
return answer;
}
풀이
우선 left 부터 right까지의 모든 합 또는 차를 구해야하므로 for문의 i를 left로 주고 right까지 돌리게 한다. 그후 짝수인지 홀수인지 약수의 갯수를 샐 수 있는 count를 변수로 지정해두고 for문을 하나 더돌려 해당하는 i 의 값의 약수를 구해준다. for문이 끝나면 let count에 약수의 갯수가 나오므로 count % 2 == 0 을 해서 count가 짝수면 + , 홀수면 -를 해주면 된다.
다른사람의 풀이
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;
}
해당하는 i의 값의 제곱근이 정수면 약수의 갯수가 홀수인 것을 감안해서 만든 코드이다. Math.sqrt(i)는 i의 제곱근을 구하는 것이다. ex) 16의 경우 제곱근이 4이고, 1,2,4,8,16 총 5개의 약수를 가지고있다.
'코딩 > 코딩테스트' 카테고리의 다른 글
[프로그래머스/JS]직사각형 별찍기 (0) | 2024.05.22 |
---|---|
[프로그래머스/JS] 행렬의 덧셈 (0) | 2024.05.21 |
[프로그래머스/JS] 나누어 떨어지는 숫자 배열 (0) | 2024.05.09 |
프로그래머스) 콜라츠 추측 -JS (0) | 2024.05.07 |
프로그래머스) 정수 내림차순으로 배치하기 -JS (0) | 2024.05.07 |