-
[프로그래머스 / JS] Lv.1 약수의 개수와 덧셈Algorithm/프로그래머스 2022. 12. 24. 23:22반응형
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
풀이
function solution(left, right) { let result = 0; let getNumOfFactors = num => { let count = 0 for (let i = 1; i * i <= num; i++) { if (i * i === num) { count++ break }else if (num % i === 0) count += 2 } return count } for (left; left<=right; left++) { if (getNumOfFactors(left) % 2 === 0) result += left; else result -= left; } return result }
실행에 걸린 최대 시간 : 1.11ms
사고과정
- left 부터 right 까지의 수를 반복하면서 약수의 개수를 파악하고 조건별로 더하거나 빼면 되겠다.
- 약수 개수를 파악하는데 걸리는 시간을 단축시키기 위해선 i * i 까지만 평가하면 되겠지?
- 1의 과정에 2의 과정을 합치는 것보다 2를 따로 표현하고 가져다 쓰는게 보기 편하겠다.
- 끝 성공!
평가
...제곱근이 정수면 약수의 개수가 홀수다......이걸 몰랐네
개선점
제곱근이 정수면 약수의 개수가 홀수다....)
function solution(left, right) { let result = 0; for (left; left<=right; left++) { if (Number.isInteger(Math.sqrt(left))) result -= left; else result += left; } return result }
알게된점
반응형'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / JS] Lv.1 신규 아이디 추천 (0) 2022.12.26 [프로그래머스 / JS] Lv.1 로또 최고 순위와 최저 순위 (0) 2022.12.26 [프로그래머스 / JS] Lv.1 숫자 문자열과 영단어 (0) 2022.12.24 [프로그래머스 / JS] Lv.1 최소직사각형 (0) 2022.12.24 [프로그래머스 / JS] Lv.1 신고 결과 받기 (0) 2022.12.23