프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 답
[pseudo code]
1. 입력받은 range의 시작과 끝을 사용해 for loop 생성
2. odd & even = [] 약수의 개수가 홀/짝인 숫자를 각각 담아줌
3. num arr의 요소를 하나씩 인자로 받아서, 해당 숫자의 약수를 뽑아줄 countFactor(num)을 생성
- count 변수를 선언하고, 아래 판별식에 따라 숫자를 올려줌
- 1 ~ num까지 for loop 생성
- num % i === 0일 경우, count++
- return count
4. 만약, countFactor()함수의 리턴 값이 홀/짝수면 i를 odd/even에 푸쉬
5. answer = even.reduce() - odd.reduce() 값을 리턴해줌
function solution(left, right) {
let odd = [],
even = [];
for (let i = left; i <= right; i++) {
if (countFactor(i)) even.push(i);
else odd.push(i);
}
console.log(odd, even);
return (
even.reduce((acc, curr) => curr + acc, 0) -
odd.reduce((acc, curr) => curr + acc, 0)
);
}
function countFactor(num) {
let count = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) count++;
}
if (count % 2 === 0) {
return true;
} else {
return false;
}
}
console.log(solution(13, 17)); // 43
console.log(solution(24, 27)); // 52
인상적은 다른 사람의 답
로직 : 정수의 제곱근이 정수면 약수의 개수가 홀수임을 이용
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;
}
'항해99_10기 > [2주차] 알고리즘 문제풀이' 카테고리의 다른 글
[27번][중급] 예산 (0) | 2022.11.23 |
---|---|
[26번][중급] 약수의 합 (0) | 2022.11.23 |
[23번][중급] 시저암호 (0) | 2022.11.23 |
[24번][중급] 신규 아이디 추천 (0) | 2022.11.23 |
[23번][중급] 시저암호 (0) | 2022.11.23 |