문제 개요
두 단어는 첫 번째 단어의 끝부분(접미사)이 두 번째 단어의 시작부분(접두사)과 일치할 때 서로 맞물릴(mesh) 수 있습니다. 예를 들어 'robinhood'와 'hoodie'는 공통 부분인 'hood'를 통해 맞물릴 수 있습니다.
우리는 문자열 배열을 인수로 받는 JavaScript 함수를 작성해야 합니다. 배열에 담긴 모든 단어가 순서대로 맞물릴 수 있다면 함수는 맞물린 글자들을 하나의 문자열로 이어서 반환하고, 하나라도 맞물리지 않는 단어가 있다면 빈 문자열('')을 반환해야 합니다.
예제
다음은 해당 기능을 구현한 코드입니다 −
const arr = ["allow", "lowering", "ringmaster", "terror"];
const meshArray = (arr = []) => {
let res = "";
for(let i = 0; i < arr.length-1; i++){
let temp = (arr[i] + " " + arr[i + 1]).match(/(.+) \1/);
if(!temp){
return '';
};
res += temp[1];
};
return res;
};
console.log(meshArray(arr));출력
콘솔 출력 결과는 다음과 같습니다 −
lowringter
코드 설명
이 함수의 핵심은 정규 표현식 /(.+) \1/입니다. 인접한 두 단어를 공백으로 연결한 문자열에서, 공백 앞에 나오는 부분 문자열과 공백 뒤에 다시 등장하는 동일한 부분 문자열을 찾아냅니다. 즉, 첫 번째 단어의 접미사와 두 번째 단어의 접두사가 일치하는 가장 긴 부분을 자동으로 추출합니다.
- 'allow'와 'lowering'은 'low'로 맞물립니다.
- 'lowering'과 'ringmaster'는 'ring'으로 맞물립니다.
- 'ringmaster'와 'terror'는 'ter'로 맞물립니다.
따라서 최종 결과는 세 부분이 이어진 'lowringter'가 됩니다. 만약 어느 한 쌍이라도 일치하는 부분이 없다면 match()가 null을 반환하므로, 함수는 즉시 빈 문자열을 반환합니다.