Computer Science/알고리즘

[JS] 전화번호 형식의 문자열을 리턴하는 알고리즘 풀이

mj73 2023. 4. 25. 17:34

1. 문제

0-9 사이의 정수를 요소로 갖는 배열을 입력받아 전화번호 형식의 문자열을 리턴해야 합니다.

 

 

 

인자 1 : arr

  • number 타입을 요소로 갖는 배열
  • arr[i]는 0 이상 9 이하의 정수
  • 배열의 길이는 8 또는 11

출력

  • string 타입을 리턴해야 합니다.

주의 사항

  • 반복문(for, while) 사용은 금지됩니다.
  • 배열의 길이가 8인 경우, 앞에 [0, 1, 0]이 있다고 가정합니다.

 

예시

let output = createPhoneNumber([0, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8]);
console.log(output); // --> '(010)1234-5678'

output = createPhoneNumber([8, 7, 6, 5, 4, 3, 2, 1]);
console.log(output); // --> '(010)8765-4321'

output = createPhoneNumber([0, 1, 1, 4, 3, 2, 1, 8, 7, 6, 5]);
console.log(output); // --> '(011)4321-8765'

 

 

 


2. 문제 풀이를 위한 개념

1) unshift

새로운 요소를 배열 앞에 추가한다. 예시는 아래와 같다.

이때 array1.unshift()는 array1의 배열의 개수를 반환하니 주의하자.

배열을 리턴하고 싶다면 array1을 따로 사용해야 한다.

const array1 = [1, 2, 3];

console.log(array1.unshift(4, 5));
// Expected output: 5

console.log(array1);
// Expected output: Array [4, 5, 1, 2, 3]

 

2) shift

const array1 = [1, 2, 3];

const firstElement = array1.shift();

console.log(array1);
// Expected output: Array [2, 3]

console.log(firstElement);
// Expected output: 1

 

3) join

배열의 모든 요소를 연결해서 하나의 문자열로 만든다.

const elements = ['Fire', 'Air', 'Water'];

console.log(elements.join());
// Expected output: "Fire,Air,Water"

console.log(elements.join(''));
// Expected output: "FireAirWater"

console.log(elements.join('-'));
// Expected output: "Fire-Air-Water"

 

 

 

3. 풀이과정

1. arr로 들어온 배열의 길이가 8인 경우는 010을 unshift로 앞에 순서대로 붙여준다.

2. 길이가 8이 아닌 경우 = 길이가 11인 경우

3. 길이가 11인 경우에는 [0,1,0], [1,2,3,4], [5,6,7,8] 이렇게 잘라서 각각 새로운 배열에 할당한다.

4. 템플릿 리터럴을 사용하여 각각 (010)1234-5678 형태로 return한다.

 

 

4. 코드

function createPhoneNumber(arr) {
  if(arr.length === 8){
    arr.unshift(0, 1, 0);
  }
  arr1 = arr.slice(0,3);
  arr2 = arr.slice(3,7);
  arr3 = arr.slice(7, 11);

  return `(${arr1.join('')})${arr2.join('')}-${arr3.join('')}`;

}