문제
숫자로 이루어진 배열을 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열의 각 숫자를 확인하여 짝수이면 제곱하고, 홀수이면 제곱근을 구한 뒤, 변환된 모든 숫자의 합계를 소수점 둘째 자리까지 반올림하여 반환해야 합니다.
해결 접근 방식
- 배열의 각 요소를 순회하며 나머지 연산자(%)를 사용해 짝수 여부를 판별합니다.
- 짝수라면 자기 자신을 곱해 제곱하고, 홀수라면
Math.sqrt()로 제곱근을 구합니다. reduce()메서드를 사용해 변환된 모든 값을 하나의 합계로 누적합니다.
예제 코드
다음은 위 문제를 해결하는 코드입니다 −
const arr = [45, 2, 13, 5, 14, 1, 20];
const squareAndRootSum = (arr = []) => {
const res = arr.map(el => {
if(el % 2 === 0){
return el * el;
}else{
return Math.sqrt(el);
};
});
const sum = res.reduce((acc, val) => acc + val);
return sum;
};
console.log(squareAndRootSum(arr));
출력
613.5498231854631
코드 설명
map() 메서드는 원본 배열을 변경하지 않으면서 각 요소를 새로운 값으로 변환한 배열을 반환합니다. 여기서는 짝수 판별 조건에 따라 제곱 또는 제곱근 결과를 담은 새 배열을 만듭니다.
reduce() 메서드는 배열의 각 요소를 순차적으로 순회하며 콜백 함수의 반환값을 누적합니다. 초기값 없이 호출되면 첫 번째 요소가 초깃값으로 사용되므로, 빈 배열이 들어오지 않도록 주의하는 것이 좋습니다.
소수점 둘째 자리까지 반올림하기
위 코드의 실행 결과는 긴 소수를 포함하고 있습니다. 문제에서 요구하는 대로 결과를 소수점 둘째 자리까지 반올림하려면 마지막 반환 부분을 다음과 같이 수정하면 됩니다.
return Number(sum.toFixed(2));
이렇게 하면 출력 결과가 613.55로 깔끔하게 정리됩니다. 문자열이 아닌 숫자 타입으로 유지하기 위해 Number()로 감싸주는 것이 좋습니다.