어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
function solution(absolutes, signs) {
var answer = 0
const list = []
for(let i=0; i<absolutes.length; i++) {
let a = signs[i] ? absolutes[i] : -absolutes[i]
list.push(a)
}
answer = list.reduce((a,b) => (a+b))
return answer;
}
빈 배열 list
를 만들고 for문
에서 반환하는 값을 push
메소드로 list
에 넣었다. 이 후 reduce
를 사용해 배열의 모든 값을 더했다.
일단 필요없는 변수들을 제거하자
function solution(absolutes, signs) {
var answer = 0
for(let i=0; i<absolutes.length; i++)
signs[i]
? answer += absolutes[i]
: answer -= absolutes[i]
}
return answer;
}
default로 있었던 answer
변수를 제외한 모든 변수를 지우고 식을 수정했다.
reduce
메소드를 사용하여 식을 간결화 해보았다.
function solution(absolutes, signs) {
return absolutes.reduce((acc,val, i) => acc + (val*(signs[i] ? 1 : -1)),0)
}
한줄만에... 그것도 reduce
를 사용해서 풀 수 있는 문제였다니....
reduce
에 대한 이해가 부족했던걸로