문제 풀기/JavaScripts

문제 26. 음양 더하기(reduce 복습)

kagan-draca 2024. 7. 16. 17:30

 

처음에 문제를 보고 reduce 함수를 사용하면 반복문 없이 간단하게 문제가 해결될거라 생각했다.

그렇게 작성한 코드

 

return absolutes.reduce((acc, cur, index)=> acc + (cur * (signs[index] ? 1 : -1)))

은 원하는 결과와 다르게 출력 됐다.

 

알고보니, reduce 사용법을 제대로 숙지하지 않아서 발생한 오류인데

 

reduce는 (calback(acc, cur, index, array), initialValue) 형태로 사용되며,

 

(아래부터 중요)

1. calback에서 사용되는 매개변수에는 

 

acc : 누산 값

cur : 현재 값

index : 현재 주소

array : reduce에 사용되는 주소

 

2. initialValue는 초기설정 값

 

이었다.

 

initailValue를 설정해주지 않으면 배열의 0번지를 초기값으로 설정하고,

그 배열의 1번지(그 다음주소)와 계산을 실행하게 된다.

 

이때, 이 문제에서는 초기값을 설정해주지 않으면 절대값(부호가 없는 값)이 초기값으로

설정되고, 부호는 버려진 값으로 초기값이 설정되고 그 다음 주소 값과 계산돼 문제가

발생하게 된다.

(위부터 중요)

 

따라서, 최종 수정된 코드는 

 

return absolutes.reduce((acc, cur, index)=> acc + (cur * (signs[index] ? 1 : -1)),0)

으로 누산기 초기 값이 0으로 설정된 상태에서 배열의 0번 주소와 계산되게 만들어주어야 했다.

 

앞으로 reduec를 사용할 때에는 initalValue 무조건 사용하는 방향으로 해야겠다.

(반복이 1번 더 이뤄지지만, 프로그래밍에 실수를 예방 할 수 있다)

 

제출한 코드 : 

 

function solution(absolutes, signs) 
{
    return absolutes.reduce((acc, cur, index)=> acc + (cur * (signs[index] ? 1 : -1)),0)
}