- 문제 설명
두 정수 left와 right가 매개변수로 주어집니다.
left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고,
약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
개인적으로 왜 1점 밖에 안 주지?하고 생각했던 문제였다.
생각보다 문제 푸는 방식이 복잡했다 ㅠㅠㅠ(이리저리 꼬여 있었던...)
도저히 어떻게 더 쉽게 풀 수 있을지 생각이 나지 않았다.
나는 조건에 맞게 각각 배열에 담아주는 방식을 사용하였다.
먼저, for문을 돌려 left부터 right까지의 숫자들을 arr 변수에 배열로 담아주었다.
그 다음은, for문 내에 중접for문을 하나 더 생성하여 i 를 j로 나눈 나머지가 0일때(약수) 변수 divis에 i를 push해주었다.
=> 여기서 왜 i로 넣어줬냐? 우리는 약수의 갯수를 구해야 하는 것이지 약수가 무엇무엇이 있는지 구해야 하는 것은 아님.
그런데 이렇게 되면 divis 배열 내에는 여러 수의 약수가 다 들어가기 때문에 각각의 약수의 갯수를 구하기가 힘들어짐.
그렇기 때문에 [ 13, 13, 13, 14, 14 ] 이런식으로 약수들을 넣은 후에 약수의 갯수를 구하도록 할 거임.
그 다음에는 for문 내에서 divis로 filter를 돌려(i를 필요로 함) num(배열의 각 수)과 i가 같을 때
=> 위에서 말한 대로 현재 수가 13이면 약수값 대신 넣어준 13의 갯수로 약수의 갯수를 구하는 것.
수에 해당하는 약수의 갯수를 구하여 변수 divisLength의 배열에 각각 담아줌.
for (let i = left; i <= right; i++) {
arr.push(i);
for (let j = 1; j <= i; j++) {
if(i % j === 0) {
divis.push(i);
}
}
divisLength.push(divis.filter((num)=> num === i).length);
}
divisLength의 갯수를 구했다면
아래에 for문을 하나 더 만들어 divisLength를 이용하여 for문을 돌릴 것이다.
for문 내에 if문을 이용하여 divisLength[x] % 2 === 0(짝수일 때)일때 미리 만들어준 변수 answer에 arr[x]를 더할 것이고
divisLength[x] % 2 === 1(홀수일 때)일때 answer에 arr[x]를 빼줄 것이다.
arr에서도 x를 index 값으로 사용할 수 있는 이유는 결국 한 수당 약수를 무조건 하나씩은 가지기 때문에arr.length와 divisLength.length의 수가 같기 때문이다.
이렇게 해준 다음 answer를 return하면 끝.
for ( let x = 0; x < divisLength.length; x++) {
if(divisLength[x] % 2 === 0) {
answer += arr[x];
} else if(divisLength[x] % 2 === 1) {
answer -= arr[x];
}
}
return answer;
[ 전체 코드 ]
function solution(left, right) {
let arr = [];
let divis = [];
let divisLength = [];
let answer = 0;
for (let i = left; i <= right; i++) {
arr.push(i);
for (let j = 1; j <= i; j++) {
if(i % j === 0) {
divis.push(i);
}
}
divisLength.push(divis.filter((num)=> num === i).length);
}
for ( let x = 0; x < divisLength.length; x++) {
if(divisLength[x] % 2 === 0) {
answer += arr[x];
} else if(divisLength[x] % 2 === 1) {
answer -= arr[x];
}
}
return answer;
}
'코딩테스트' 카테고리의 다른 글
프로그래머스 자바스크립트 문자열 다루기 기본 (0) | 2023.04.23 |
---|---|
프로그래머스 자바스크립트 암호 해독 (3) | 2023.03.23 |
프로그래머스 자바스크립트 숨어있는 숫자의 덧셈 (1) (0) | 2023.03.22 |
프로그래머스 자바스크립트 모음 제거 (0) | 2023.03.22 |
프로그래머스 자바스크립트 문자열 안에 문자열 (0) | 2023.03.22 |
댓글