문제 소개
정확히 10개의 양의 정수로 구성된 배열 arr을 첫 번째이자 유일한 인수로 받아 처리하는 JavaScript 함수를 작성해야 합니다.
이 함수는 전화번호 형식으로 구성된 문자열을 반환해야 합니다.
예를 들어, 함수에 다음과 같은 입력이 주어졌다고 가정해 보겠습니다.
입력
const arr = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
출력
const output = '(987) 654-3210';
예제 코드
다음은 위 문제를 해결하는 코드입니다.
const arr = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0];
const createNumber = (arr = []) => {
let res = '';
arr = arr.map(String);
res += `(${arr[0]+arr[1]+arr[2]}) `;
res += `${arr[3] + arr[4] + arr[5]}-`;
res += arr[6] + arr[7] + arr[8] + arr[9];
return res;
};
console.log(createNumber(arr));출력 결과
(987) 654-3210
코드 동작 원리
이 코드가 작동하는 방식을 단계별로 살펴보겠습니다.
map(String)메서드를 사용해 배열의 모든 숫자를 문자열로 변환합니다. 이 과정이 중요한 이유는, 변환하지 않으면 덧셈 연산자(+)가 문자열을 연결하는 대신 숫자를 실제로 더해버리기 때문입니다.- 템플릿 리터럴을 활용해 전화번호의 각 구간을 지정된 형식에 맞게 조합합니다.
- 첫 세 자리는 괄호
()로 감싸고 뒤에 공백을 추가합니다. - 중간 세 자리 뒤에는 하이픈(
-)을 붙입니다. - 마지막 네 자리를 이어 붙여 완성된 전화번호 문자열을 반환합니다.
더 간결한 대안 방법
slice()와 join() 메서드를 조합하면 인덱스를 일일이 참조하지 않고도 같은 결과를 훨씬 깔끔하게 얻을 수 있습니다.
const createPhoneNumber = (arr) =>
`(${arr.slice(0, 3).join('')}) ${arr.slice(3, 6).join('')}-${arr.slice(6).join('')}`;
console.log(createPhoneNumber([9, 8, 7, 6, 5, 4, 3, 2, 1, 0]));
// 출력: (987) 654-3210이 방식은 배열을 세 구간으로 나눈 뒤 각각 하나의 문자열로 합치기 때문에 가독성이 뛰어나고, 실무에서도 널리 사용되는 패턴입니다.