길이에 따른 연산

남예지·2024년 1월 11일
0

미코

목록 보기
2/37

문제

정수가 담긴 리스트 num_list가 주어질 때, 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을 10 이하이면 모든 원소의 곱을 return하도록 solution 함수를 완성해주세요.

나의 풀이

function solution(num_list) {
    var answer = 0;
    
    const listLength = num_list.length
    
    if(listLength >= 11){
         for(let i=0; i < listLength; i++){
        answer += num_list[i]
    	}
    }else if(listLength <= 10){
        answer += 1
        num_list.forEach((num) => {answer *= num})
    }else{
    	answer += num_list[0]
    }
    return answer;
}

굳이 이렇게 한 이유를 설명하자면. 음. 굳이 안이랬어도 됐을 거같아서 코드를 리팩토링 해보자.

쓰는 메서드는 forEach로 통일하는게 좋을 것 같다. 또 굳이 else if, else를 세세히 안따져도 되는 문제인듯 하다.

function solution(num_list) {
    var answer = 0;
    
    if(num_list.length >= 11){
         num_list.forEach((num) => {answer += num})
    }else{
        answer += 1
        num_list.forEach((num) => {answer *= num})
    }
    
    return answer;
}

바꾼게 더 직관적인듯.

forEach는 currentElement, index, array를 파라미터로 받는다.
또 forEach는 항상 undefind를 return한다. 새로운 배열을 만들기 싫다면 map말고 forEach를 활용해야겠다.

어제 챗gpt가 짜준 코드 중 forEach가 들어가 있는 부분이 이해가 안갔는데 그냥 썼던 기억이 난다. 앞으론 모르는건 그때그때 검색해서 이해해야지. 이렇게 쉬운걸...

다른 분들의 코드는 항상 놀랍다.
천상계는 코드부터 다르다. 부럽다.

reduce라는 메서드를 잘 쓰던데 나는 reduce가 항상 어렵고, 이해가 잘 안가더라. 다음 코테는 reduce를 이해하면서 풀어봐야지

다른분들의 코드

const solution=n=>n.reduce((a,v)=>n.length>10?a+v:a*v)
function solution(num_list) {
    const mult = (acc, v) => acc * v;
    const add = (acc, v) => acc + v;

    return num_list.length > 10
        ? num_list.reduce(add, 0)
        : num_list.reduce(mult, 1);
}

특히 두 번째 코드 레알 맛도리... 내가 하고싶었던게 바로 저런거라구

암튼 끝.
내일 더 잘해보자구

profile
총총

0개의 댓글