Lv. 1 - 약수의 합 풀이과정
문제 설명
정수 n
을 입력받아 n
의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한사항
-
n
은 0 이상 3000이하인 정수입니다.
입출력 예
N | return |
---|---|
12 | 28 |
5 | 6 |
입출력 예 설명
3-1) 입출력 예 설명 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.
3-2) 입출력 예 설명 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.
프로그래머스에서 제공한 코드
처음 프로그래머스에서 작성된 코드는 아래와 같다.
function solution(n) {
var answer = 0;
return answer;
}
문제 풀이
const solution = n => {
let arr = [];
for(let i = 0; i <= n; i++) {
if(n % i === 0) arr.push(i);
}
return arr.reduce((a, b) => a + b ,0);
}
함수 선언
- 화살표 함수를 사용하여
n
매개변수를 받는다.
풀이
- 입출력 예#1 의 경우 12의 약수는 1,2,3,4,6,12며, 해당 값을 배열로 담을 변수
arr
을 생성한다. - 반복문을 통해
n % i === 0
약수의 값을arr.push(i)
를 통해 arr 배열에 담는다. - 마지막으로 약수를 전부 더하기 위해
reduce
메서드를 사용하여 배열을 전부 더해준 후 return 했다.
결과 반환
- 매개변수
n
에 12을 대입하면 1+2+3+4+6+12 = 28 - 매개변수
n
에 5을 대입하면 1+5 = 6
실행
-
console.log(solution(12))
실행하면 28가 출력된다. -
console.log(solution(5))
실행하면 6이 출력된다.
다른 사람의 풀이 참고
다른 사람의 풀이를 보고 내가 푼 풀이 방식이 너무 어이가 없었다.
for문에서 그냥 값을 더해주면 되는거였는데.. 굳이 배열로 담아서 다시 값을 더하다니..!
요즘 배열 메서드를 공부하다보니 뇌가 그 쪽으로 문제를 풀려고 하는 것..같.. 다음엔 문제를 잘 읽어보고 해결해봐야겠다.
// [17명] for 반복문을 사용한 풀이방식
function solution(num) {
let sum = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) sum += i
}
return sum
}
링크
- 문제 링크: 문제 링크
- Git: rarrit github
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges