ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS] 전화번호 형식의 문자열을 리턴하는 알고리즘 풀이
    Computer Science/알고리즘 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('')}`;
    
    }
Designed by Tistory.