처음에 문제를 보고 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)
}
'문제 풀기 > JavaScripts' 카테고리의 다른 글
문제 28. 없는 숫자 더하기 (0) | 2024.07.18 |
---|---|
문제 27. 핸드폰 번호 가리기(repleat, slice) (0) | 2024.07.16 |
문제 25. 나누어 떨어지는 숫자(배열 filter 함수) (0) | 2024.07.16 |
문제 24. 서울에서 김서방 찾기(배열 Find, FindIndex) (0) | 2024.07.16 |
문제 23. 콜라츠 추측 (0) | 2024.07.16 |