정수 n
이 주어질 때, n
이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.
0 < n
≤ 1000
n | result |
---|---|
10 | 30 |
4 | 6 |
입출력 예 #1
n
이 10이므로 2 + 4 + 6 + 8 + 10 = 30을 return 합니다.입출력 예 #2
n
이 4이므로 2 + 4 = 6을 return 합니다.const solution = (n) => {
let arr = [];
for(i=0; i<=n; i+=1){
if(i%2===0){
arr.push(i);
}
}
return arr.reduce((sum, x)=>sum + x,0)
}
/* SOLUTION1은 내가 처음에 작성했던 방식이다. for문 안에 if를 한번 더 작성하여
arr에 매개변수 n이하의 짝수들을 배열로 나열하고 reduce를 이용하여 arr 배열에 있는 요소들을
모두 더 해주었다. */
function solution(n) {
let arr = [];
for(i=2; i<=n; i+=2){
arr.push(i);
}
return arr.reduce((sum, x)=>sum+x,0);
}
/* SOLUTION1의 방법에서 if문을 없애고 조금더 간결하게 할수있는 방법을 생각하다가 for문에서
i를 2씩 증가하여 arr에 저장하는 방법으로 진행하였다. for문에 초기값을 i=0;으로 하지않고 i=2;로 작성한
이유는 0은 더해봤자 의미가 없기때문에 조금더 빠르게 진행되기 위해 초기값을 i=2;로 작성하였다.
이하 방식은 SOLUTION1과 동일하다. */
function solution(n) {
var half = Math.floor(n/2);
return half*(half+1);
}
/* 다른분들 풀이 찾아보다가 수열 공식을 이용하여 사용하는 방식도 있었다. */
function solution(n) {
return Array(n)
.fill()
.map((_, i) => i + 1)
.filter((v) => v % 2 === 0)
.reduce((acc, cur) => acc + cur, 0);
}
/* 다른분 풀이 중에 메서드 체이닝을 이용하여 작성한 코드도 있었다.
Array(n)으로 생성하게되면 n.length를 가진 array가 생성이된다. 이때 값은 존재하지 않는다.
fill 메서드는 인수로 전달받은 값을 배열의 처음부터 끝까지 요소로 채운다.
map 메서드의 두번째 인수로 오는 i는 인덱스를 뜻하며 첫번째 인수는 요소값이다.
filter 메서드를 이용하여 v%2===0인 값을 추출하여 리턴해주고 마지막으로 reduce 메서드를 이용하여 모든
값을 더해준다. */
출처 : 프로그래머스 스쿨 | 코딩테스트 연습
https://school.programmers.co.kr/learn/courses/30/lessons/120831