저장을 습관화

프로그래머스 LV.1 약수의 합 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.1 약수의 합

ctrs 2023. 8. 7. 21:19

프로그래머스 LV.1 약수의 합

https://school.programmers.co.kr/learn/courses/30/lessons/12928

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 명

약수의 합


2. 문제 설명

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.


3. 제한 사항

n은 0 이상 3000이하인 정수입니다.


4. 예시

n return
12 28
5 6


5. 기본 제공 코드

function solution(n) {
    var answer = 0;
    return answer;
}


6. 제출한 내 답

const solution = (n) => {
  let answer = 0;
  let arr = [];
  for (i = 1; i <= n; i++) {
    if (n % i === 0) {
      arr.push(i);
    }
  }

  arr.forEach((num) => {
    answer += num;
  });
  return answer;
};

 

6-2. VSC에 작성한 내용

const solution = (n) => {
  let answer = 0;
  let arr = [];
  for (i = 1; i <= n; i++) {
    if (n % i === 0) {
      arr.push(i);
    }
  }

  arr.forEach((num) => {
    answer += num;
  });
  return answer;
};

// 하나씩 빼지 말고
// 2부터 n까지 올라가면서 이걸 i라고 지정
// n을 i로 나눴을때 딱 떨어지면 arr.push[i]

// 테스트
console.log(solution(1));
console.log(solution(12));
console.log(solution(5));


7. 특이사항(코드 실수한 부분)

7-1. for문 착각

function solution(n) {
  for (i = n; i < 2; i--) {
    console.log(i);
  }
}

console.log(solution(12))
console.log(solution(5))

이따위로 써놓고 어 왜 아무것도 안나오지 ㅇㅈㄹ 죽여벌리라

 

 

7-2. 처음 생각을 잘못 했었다.

let arr = [1];

const solution = (n) => {
  for (i = n; i >= 2; i--) {
    if (i % 2 === 0 || i % 3 === 0) {
      arr.push(i);
    }
  }
  return arr;
};

이런 식으로..

배열 arr에 1을 기본으로 넣어주고

매개변수 n부터 시작해 1씩 빼가면서, i가 2가 될때까지 반복문을 돌린다.

그리고 2나 3으로 나눴을때 딱 나눠 떨어지면 배열 arr에 추가한다.

그 뒤 배열의 값들을 모두 더하려고 했었다.

 

이렇게 했더니 매개변수 n의 약수가 아닌 1부터 n 사이의 수 중 2의 배수나 3의 배수를 구하게 되더라

 

 

7-3. 배열의 초기화를 잊음

let arr = [];

const solution = (n) => {
  for (i = 1; i <= n; i++) {
    if (n % i === 0) {
      arr.push(i);
    }
  }
  return arr;
};

console.log(solution(12)); 
console.log(solution(4));

이렇게 적으니 실행결과가

[ 1, 2, 3, 4, 6, 12 ]
[
   1, 2, 3, 4, 6,
  12, 1, 2, 4
]

이렇게 나오더라

이것도 어디서 생긴 문제인지 몰라 한참 헤맸음..

 

 

좋은일

억지로 하나 쥐어짜내면

이제서야 화살표 함수 사용에 익숙해진 점...

사실 늦었지

좋은 일도 아니지

 

안좋은일

전혀 어려운 문제가 아닌 곳에서 시간을 30분이나 잡아먹은 것

이런 지능으로 어떻게 살아가나

 


8. 다른 사람이 작성한 답

8-1. 배열 생략

function solution(num) {
    let sum = 0;
    for (let i = 1; i <= num; i++) {
        if (num % i === 0) sum += i
    }
    return sum
}

배열을 선언할 것도 없이

반복문 안에서 매개변수/i=0이라면 바로 더해버리기...

 

8-2. 제곱근 구하기

function solution(n) {
    var answer = 0;
    let i;
    for (i = 1; i <= Math.sqrt(n); i++){
        if (!(n%i)) {
            answer += (i+n/i);
        }
    }
    i--;
    return (i === n/i) ? answer-i : answer;
}

왜.. 이렇게 하신거지..?