728x90
반응형
✅문제설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
✅입출력 예
✅입출력 예 설명
💡내가 작성한 풀이
function solution(left, right) {
let count = 0;
let sum = 0;
for( let k = 0; k <= right-left ; k++){
for(let i = 1; i <= left+k; i++ ){ if((left+k)%i == 0){ count++;} }
if(count % 2 == 0){ sum=sum+(left+k) }
else { sum=sum-(left+k) }
count = 0;
}return sum
}
if((left+k)%i ) 여기서 left + k에 가로를 안쳐줘서 뭐가 잘못됐는지 한참 찾었다,,,,🤦♀️
💡다른 사람들 풀이
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.isInteger(Math.sqrt(i)) 이 코드로 약수의 개수가 홀수냐 아니냐를 판별해서 문제를 풀 수 있었던 것이다.
💡새로 습득한 지식
Math.sqrt() : 제곱근을 구하는 함수
1024의 제곱근이 32이다. 이 제곱근이 정수면 약수의 개수가 홀수인 것이다. 약수는 보통 짝이 맺어져서 곱하면 수가 나오는데 제곱근이 정수인 것들이 짝이 없이 홀로 2번 곱하면 그 수가 돼서 약수의 개수가 홀수가 되는 것 같다.
16을 예로 들면 1,2,4,8,16 약수의 개수가 5개로 홀수고 제곱근은 4이다.
12의 제곱근은 약 3.46 정수가 아니다. 12의 약수는 1,2,3,4,6,12 6개로 짝수이다.
Number.isInteger(): 전달된 값이 정수인지 확인하는 메소드
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
대충 만든 자판 (0) | 2023.12.12 |
---|---|
문자열 나누기 (1) | 2023.12.10 |
시저 암호 - 알파벳 함수 (0) | 2023.11.29 |
두 개 뽑아서 더하기 - spread operation (0) | 2023.11.24 |
최소 직사각형 - 배열의 최소값과 최대값 구하는 함수 (0) | 2023.11.15 |