홀짝에 따라 다른 값 반환하기

남예지·2024년 1월 17일
0

미코

목록 보기
7/37

문제

양의 정수 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;
}

와우... 조건문 안쓰고 연산만으로 이게 가능하군...
총총..

profile
총총

0개의 댓글