정수 배열을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 원본 배열의 요소 중 자릿수(숫자의 개수)가 짝수인 값만 골라 새로운 배열을 만든 뒤 반환해야 합니다.
예를 들어, 입력 배열이 다음과 같다면 −
const arr = [12, 6, 123, 3457, 234, 2];
출력 결과는 다음과 같아야 합니다.
- 12 → 자릿수 2개 (짝수) ✅
- 6 → 자릿수 1개 (홀수) ❌
- 123 → 자릿수 3개 (홀수) ❌
- 3457 → 자릿수 4개 (짝수) ✅
- 234 → 자릿수 3개 (홀수) ❌
- 2 → 자릿수 1개 (홀수) ❌
const output = [12, 3457];
풀이 접근 방식
이 문제는 다음 단계로 해결할 수 있습니다.
- 배열을 순회하면서 각 요소를 확인합니다.
Math.abs()를 사용해 음수일 경우에도 올바르게 처리할 수 있도록 절댓값으로 변환합니다.- 숫자를
String()으로 문자열로 변환한 뒤, 문자열의 길이(자릿수)가 짝수인지 검사합니다. - 자릿수가 짝수인 요소만 결과 배열에 추가합니다.
예제 코드
const arr = [12, 6, 123, 3457, 234, 2];
const findEvenDigitsNumber = (arr = []) => {
const res = [];
const { length: l } = arr;
for(let i = 0; i < l; i++){
const num = Math.abs(arr[i]);
const numStr = String(num);
if(numStr.length % 2 === 0){
res.push(arr[i]);
};
};
return res;
};
console.log(findEvenDigitsNumber(arr));출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[12, 3457]
코드 설명
Math.abs(arr[i])는 음수가 입력되더라도 마이너스 기호가 자릿수 계산에 영향을 주지 않도록 합니다. 이후 String(num)으로 숫자를 문자열로 변환하면 .length 속성으로 간단히 자릿수를 구할 수 있습니다. 길이를 2로 나눈 나머지가 0이라면 자릿수가 짝수이므로 해당 원래 값을 결과 배열에 push합니다.
참고로, 같은 로직을 filter 메서드를 사용해 더 간결하게 표현할 수도 있습니다.
const findEvenDigitsNumber = (arr = []) => arr.filter(num => String(Math.abs(num)).length % 2 === 0);