반응형
https://programmers.co.kr/learn/courses/30/lessons/77884
나의 풀이
function isOddOrEven(num) {
let divisorCount = 0;
for (let i = 1; i <= num; i++) {
if (!(num % i)) {
divisorCount += 1;
}
}
return !(divisorCount % 2) ? true : false;
}
function solution(left, right) {
let answer = 0;
for (let i = left; i <= right; i++) {
if (isOddOrEven(i)) {
answer += i;
continue;
}
answer -= i;
}
return answer;
}
약수의 개수가 홀수인지 짝수인지 판별하는 함수를 따로 만들었다.
솔루션 함수에서는 홀수인지 짝수인지에 따라 더하고 빼도록 하고 정답을 반환하도록 하였다.
다른 사람의 풀이
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;
}
이분은 함수를 따로 만드는 대신 제곱근을 사용하였다.
예를 들어 제곱수인 36은 6 x 6처럼 같은 숫자의 제곱으로 될 수 있기 때문에 약수가 홀수이다.
이 성질을 활용하겠다는 생각은 하지 못했는데 대단하다..!
확실히 수학적인 이론을 사용하는 것이 코드의 길이를 크게 줄여줄 수 있는 것 같다.
반응형
'IT > Algorithm' 카테고리의 다른 글
프로그래머스) x만큼 간격이 있는 n개의 숫자 (0) | 2021.10.21 |
---|---|
프로그래머스) 콜라츠 추측 (0) | 2021.10.21 |
프로그래머스) 나머지가 1이 되는 수 찾기 (0) | 2021.10.19 |
프로그래머스) 소수 만들기 (0) | 2021.10.19 |
프로그래머스) 3진법 뒤집기 (0) | 2021.10.18 |