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('')}`;
}