정수가 담긴 리스트 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); }
특히 두 번째 코드 레알 맛도리... 내가 하고싶었던게 바로 저런거라구
암튼 끝.
내일 더 잘해보자구