양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.
쉽네 하고 풀다가 20분 넘게 헤맸다.
짝수일때 짝수인 양의정수, 홀수일때 홀수인 양의정수.
문제를 잘 읽자.
function solution(n) {
let answer = 0;
if(n % 2 === 0){
for(let i=1; i<=n; i++){
if(i % 2 === 0){
answer += (i*i)
}
}
}else{
for(let i=1; i<=n; i++){
if(i % 2 !== 0){
answer += i
}
}
}
return answer
}
급한데로 if와 for을 덕지 덕지 붙여서 풀었다.
생각해보니 저 n을 for문 돌려서 배열로 만들고 그 다음을 진행했어도 좋았을 것 같다.
function solution(n) {
let odd = 0;
let even = 0;
const numArr = []
for(let i=1; i<=n; i++){
numArr.push(i)
}
numArr.filter((num) => {if(num % 2 !== 0){odd += num}})
numArr.filter((num) => {if(num % 2 === 0){even += (num * num)}})
return (n % 2 === 0) ? even : odd
}
이렇게 해도 연산이 많아보이긴 하네...
그래도 풀긴 풀었다.
근데 지금보니까 또 쓸데없이 filter 2번 돌린 다음에 리턴을 하니까 비효율적이네...
와 근데 나 수학 공부좀 해야겠다...
//어떤 멋진 사람의 풀이
function solution(n) {
if(n%2===1)
return (n+1)/2*((n + 1)/2) ;
else
return n*(n+1)*(n+2)/6;
}
와우... 조건문 안쓰고 연산만으로 이게 가능하군...
총총..