Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ios
- Promise
- debounce
- react animation
- private-access-to-photos
- promise.all
- CS
- react native
- react-native-permissions
- rn
- async
- react-native-image-picker
- react-native
- react
- React-Native업데이트
- RN아키텍쳐
- named type
- await
- animation
- Throttle
- axios
- javascript
- RN새로운아키텍쳐
- RN업데이트
- hydration mismatch
- motion.div
- Swift
- no-permission-handler-detected
- 비동기
- Hash-table
Archives
- Today
- Total
하루살이 개발일지
[Algorithm] 약수의 개수 구하기 - 제곱수의 약수의 개수는 홀수임을 활용 본문
제곱수의 특성과 제곱수의 약수의 개수
- 제곱수의 약수의 개수가 홀수인 것은 제곱수의 특성 때문
- 제곱수는 항상 어떤 수를 제곱한 형태
- 그 약수는 쌍을 이루는 약수들이 있고, 그 가운데 제곱한 수 자신만이 쌍을 이루지 않는 약수로 홀수개의 약수를 가지게 됨
- 예를 들어 16 (4 X 4) 이라는 제곱수일때, 16의 약수는 1, 2, 4, 8, 16인데, 이 약수들 중에서 1과 16은 쌍을 이루고 2와 8은 쌍을 이룸.
- 그러나 4는 쌍을 이루지 않는 유일한 약수
- 따라서 16의 약수는 총 5개로 홀수
제곱근 활용했을 때와 아닐 때의 코드 효율성
제곱근 활용하지 않았을 때 (for 반복문 사용)
const findDivisors = (num) => {
const divisors = [];
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
divisors.push(i);
}
}
return divisors;
};
const isDivisorCountOdd = (num) => {
const divisors = findDivisors(num);
return divisors.length % 2 !== 0;
};
console.log(isDivisorCountOdd(16)); // true
console.log(isDivisorCountOdd(15)); // false
- findDivisior 함수 : 주어진 숫자의 모든 약수를 찾아 배열로 반환하는 함수
- isDivisorCountOdd : findDivisor 함수를 호출해 약수의 배열을 얻은 다음, 배열의 길이가 홀수인지 여부를 반환하는 함수
- 이는 16(제곱수) 일때 약수의 개수가 홀수이고, 15(안 제곱수)는 약수의 개수가 짝수임을 보여줌
- 하지만, 이런 방식은 숫자가 커질수록 많은 계산을 필요로 함.
제곱근 활용했을 때 (Math.sqrt() 사용)
const isSquareNumber = (num) => {
return Number.isInteger(Math.sqrt(num));
};
console.log(isSquareNumber(16)); // true
console.log(isSquareNumber(15)); // false
- isSquareNumber 함수는 주어진 숫자의 제곱근이 정수인지 확인해 제곱수인지 판별하는 함수
- 즉, isSquareNumber(16)은 true를 반환하고, 15일때는 false를 반환함
- 이는 위의 isDivisorCountOdd 함수와 동일한 결과를 반환하지만 계산 효율성 면에서 훨씬 우수함
'알고리즘' 카테고리의 다른 글
[Algorithm] 최대공약수와 최소공배수 (유클리드 호제법 사용) - 프로그래머스 (0) | 2023.06.20 |
---|---|
[Algorithm] K번째 수 - 프로그래머스 (0) | 2023.06.20 |
[Algorithm] 약수의 합 - 프로그래머스 (0) | 2023.06.20 |
[Algorithm] 약수의 개수와 덧셈 - 프로그래머스 (0) | 2023.06.20 |
[Algorithm] 문자열 내 마음대로 정렬하기 - 프로그래머스 (0) | 2023.06.19 |