본문 바로가기
자기개발/TIL

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

by 금화맘 2023. 7. 28.

프로그래머스의 문제를 해석하는데 조금 시간이 걸렸다.

n이 홀수이면 그냥 n까지의 숫자를 모두 더하고 n이 짝수이면 n까지의 숫자를 모두 제곱해서 더하는 건줄 알았다.

그래서 쉽게하기 위해 if문을 사용해서 n이 양의 정수이면 array.from({length:n})울 사용해 배열을 만들고, reduce를 이용해 배열안의 모든 수를 더하고자 했다.

그런데 로직을 짜고 코드를 만들었는데 n이하의 홀수인 모든 양의 정수의 합을 구해야 하는 거였다. 홀수면 배열에서 홀수의 값만, 짝수면 배열에서 짝수의 값을 제곱해서 만들어야 했다.

그래서 다시 로직을 짜야 했다.

array.from을 사용해서 배열을 만들고reduce를 사용하는 것은 같았으나 reduce에서 조건을 달아서 더하는 걸로 바꿨다

array.from으로 만들때도 array가 아니라 Array.from으로 만들어야 해서 오류 수정했다. 양의 숫자만 골라서 더하는 것은 쉽게 할 수 있었다.

짝수가 오히려 당황스러웠는데 reduce((a,c,i)=>c%2==0 ?  (a+Math.pow(c,2)) : a,0) 이렇게 해야만 성공할 수 있었다.

Math.pow대신에 sqrt나 **을 사용해보고 싶었는데 (c**)를 하면 )이 기대할 수 없는? 토큰이라 하고, sqrt를 하면 값이 소수점이 생겨났다...

 

궁금한 점을 해결해 주는 다른 사람의 풀이를 봤다.

function solution(n) {
    if (n % 2 === 0) {
        return Array
            .from({length: n / 2}, (_, i) => (i + 1) * 2)
            .reduce((acc, cur) => acc + cur ** 2, 0);
    } else {
        return Array
            .from({length: Math.ceil(n / 2)}, (_, i) => i * 2 + 1)
            .reduce((acc, cur) => acc + cur, 0);
    }
}

진짜 내 기준 오나벽한 코드였던거 같다.

if문으로 조건을 짝수를 먼저 걸었는데 Array.from으로 먼저 배열을 만드는데 여기서 내가 원했던 짝수 숫자만 담거나 홀수 숫자만 담는 코드를 사용했고 .으로 연결해서 reduce를 사용했다. 짝수는 제곱근을 만들어서 하는데 **2)를 해야 하는 거였다. 오늘도 하나 배워간다.

 

내가 합격?한 코드는

function solution(n) {
    var answer = 0;
    if(n%2!=0){
        let map = Array.from({length:n},(v,i)=>i+1)
        answer = map.reduce((a,c,i)=>c%2!=0? a+c : a,0)
    }else{
        let map = Array.from({length:n},(v,i)=>i+1)
        answer = map.reduce((a,c,i)=>c%2==0 ?  (a+Math.pow(c,2)) : a,0)

    }
    return answer;

}

 

오늘의 잘한점 array.from 메서드를 잘 생각해 냈고 사용했다.

reduce로 짝수만 더하고 홀수만 더하는 코드를 빠르게 만들어 냈다.

 

오늘의 배운 점, 더 나아질 점

Array.from으로 배열을 만들되 다양하게 만들 수 있는 방법을 알아보자, 

**사용에 익숙해지자

'자기개발 > TIL' 카테고리의 다른 글

두개의 배열로 filter 사용하기  (0) 2023.08.01
js 5명씩  (0) 2023.07.31
js 문자열 바꿔서 찾  (0) 2023.07.27
o떼기 js  (1) 2023.07.27
홀수 vs 짝수 js  (0) 2023.07.25