문제 정의
JavaScript에서 두 개의 문자열을 인자로 받아, 두 번째 문자열을 첫 번째 문자열 뒤에 이어 붙이는 함수를 작성해야 합니다. 다만 한 가지 조건이 있습니다. 첫 번째 문자열의 마지막 문자와 두 번째 문자열의 첫 번째 문자가 동일하다면, 중복되는 문자 하나를 제거한 상태로 연결해야 합니다.
예를 들어 'Food'와 'dog'를 단순히 붙이면 'Fooddog'이 되지만, 경계에서 'd'가 겹치므로 스마트한 연결 결과는 'Foodog'가 되어야 합니다.
구현 예제
const str1 = 'Food';
const str2 = 'dog';
const concatenateStrings = (str1, str2) => {
const { length: l1 } = str1;
const { length: l2 } = str2;
// 마지막 문자와 첫 문자가 다르면 그대로 연결
if (str1[l1 - 1] !== str2[0]) {
return str1 + str2;
}
// 중복을 피하기 위해 두 번째 문자열의 첫 글자를 제거
const newStr = str2.substr(1, l2 - 1);
return str1 + newStr;
};
console.log(concatenateStrings(str1, str2));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
Foodog
코드 동작 원리
- 문자열 길이 추출: 구조 분해 할당(destructuring)을 활용해 각 문자열의 길이를 l1, l2 변수에 저장합니다.
- 중복 여부 확인: str1[l1 - 1]은 첫 번째 문자열의 마지막 문자, str2[0]은 두 번째 문자열의 첫 번째 문자를 가리킵니다. 두 값이 다르다면 중복이 없으므로 + 연산자로 단순 연결해도 됩니다.
- 중복 제거 후 연결: 두 문자가 같다면 substr(1, l2 - 1)로 두 번째 문자열의 첫 글자를 잘라낸 뒤, 나머지 부분을 첫 번째 문자열에 이어 붙입니다.
참고: 최신 문법으로 개선하기
substr() 메서드는 현재 폐기 예정(deprecated) 상태이므로, 실무 코드에서는 slice() 메서드를 사용하는 것이 권장됩니다.
const newStr = str2.slice(1);
slice(1)은 인덱스 1부터 문자열 끝까지를 반환하므로 동일한 결과를 더 간결하고 안전하게 얻을 수 있습니다.