문제 소개
이번 글에서는 하나의 숫자를 입력받아 그 숫자를 먼저 뒤집은 다음, 뒤집힌 숫자를 각 자릿수로 분리하여 배열 형태로 반환하는 JavaScript 함수를 작성해 보겠습니다.
예를 들어 입력값과 기대되는 출력값은 다음과 같습니다.
입력
const num = 1234567;
출력
const output = [7, 6, 5, 4, 3, 2, 1];
입력받은 숫자 1234567을 뒤집으면 7654321이 되고, 이를 각 자릿수별로 분리하면 위와 같은 배열이 만들어집니다.
해결 방법
이 문제는 다음 세 단계로 해결할 수 있습니다.
1. 숫자를 문자열로 변환 — String() 함수를 사용해 숫자를 문자열로 바꿉니다.
2. 문자열을 배열로 분리 후 뒤집기 — split('')으로 한 글자씩 나눈 뒤 reverse() 메서드로 순서를 반전시킵니다.
3. 각 요소를 다시 숫자로 변환 — map() 메서드와 Number()를 사용해 문자열 요소들을 숫자로 바꿔줍니다.
예제 코드
위 로직을 구현한 전체 코드는 다음과 같습니다.
const num = 1234567;
const reverseAndSplit = (num = 1) => {
const numStr = String(num);
const arr = numStr.split('');
arr.reverse();
return arr.map(el => {
return Number(el);
});
};
console.log(reverseAndSplit(num));실행 결과
[7, 6, 5, 4, 3, 2, 1]
코드 설명
코드의 동작 흐름을 단계별로 살펴보면 다음과 같습니다.
먼저 String(num)을 통해 숫자 1234567이 문자열 "1234567"로 변환됩니다. 이후 split('')을 호출하면 문자열이 ['1', '2', '3', '4', '5', '6', '7']이라는 문자 배열로 분리됩니다. 여기에 reverse()를 적용하면 배열의 순서가 반전되어 ['7', '6', '5', '4', '3', '2', '1']이 됩니다. 마지막으로 map(el => Number(el))을 사용해 각 문자열 요소를 숫자 타입으로 변환한 최종 배열을 반환합니다.
참고로 위 코드를 더 간결하게 표현하고 싶다면 메서드 체이닝을 활용해 다음과 같이 한 줄로 작성할 수도 있습니다.
const reverseAndSplit = (num = 1) =>
String(num).split('').reverse().map(Number);이처럼 JavaScript의 내장 메서드들을 조합하면 별도의 반복문 없이도 간단하고 가독성 좋게 문제를 해결할 수 있습니다.