문제
두 정수 left와 right가 매개변수로 주어진다. left부터 right까지 모든 수에서 약수의 개수를 구해 짝수인 수는 더하고, 홀수인 수는 뺀 수를 리턴하여라
나의 풀이 1
function solution(left, right) {
var answer = 0;
while(left <= right) {
var arr = [];
for(let i = 1; i <= left; i++) {
if(left % i === 0) {
arr.push(i);
}
}
arr.length % 2 == 0 ? answer += left : answer -= left
left++;
}
return answer;
}
- while 루프를 사용하여 left가 right 이하인 동안 반복하는 코드를 짠다
- 각 숫자마다 약수의 개수를 저장하는 배열 arr 생성
- for를 사용하여 1부터 left까지 숫자를 반복하며 약수를 찾는다 약수를 찾을 때마다 arr 배열에 추가
- arr.length를 통해 약수의 개수를 확인하고, 짝수인 경우 더하고 홀수인 경우를 뺀다
나의 풀이 2 (리팩토링)
function solution(left, right) {
var answer = 0;
for (let num = left; num <= right; num++){
var count = 0;
for(let i = 1; i<= num; i++){
if(num % i === 0){
count++
}
}
answer += count % 2 === 0 ? num : -num
}
return answer;
}
- while문을 for문으로 변경하고 arr에 배열로 담아 길이를 비교한 대신 count를 사용했다
- 약수의 갯수마다 카운트하여 이 수가 짝수인지 홀수인지 구분해 덧셈 뺄셈을 한다
그 외 풀이
1) 제곱근 사용
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;
}
- 제곱근이 정수이면 약수의 개수가 홀수다 !!
- i의 제곱근을 Number.isInterger 사용하여 주어진 값이 정수인지 판별한다
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
javascript 주어진 문자열 배열중 접두사 찾기 (1) | 2023.10.23 |
---|---|
javascript 정규식을 사용한 문자열 다루기 (0) | 2023.10.23 |
javascript 주어진 길이 n에 따라 "수박" 패턴을 유지하는 문자열 생성하기 (0) | 2023.10.20 |
javascript 배열 내 가장 작은 수 제거하기 (0) | 2023.10.19 |
javascript 무작위 정수 배열 중에서 n으로 나누어 떨어지는 숫자의 배열 생성 (0) | 2023.10.18 |