문장이 부드럽다(smooth)는 것은 무슨 의미일까요? 여기서 말하는 부드러운 문장이란, 문장을 구성하는 각 단어의 첫 글자가 바로 앞 단어의 마지막 글자와 동일한 경우를 뜻합니다. 즉, 단어와 단어가 끊김 없이 자연스럽게 이어지는 문장이라고 할 수 있습니다.
예를 들어 다음과 같은 문장을 살펴보겠습니다.
'this stringt tries sto obe esmooth'→ 각 단어의 시작 글자가 이전 단어의 끝 글자와 일치하므로 부드러운 문장입니다.'this string is not smooth'→ 'string'의 끝 글자 'g'와 'is'의 첫 글자 'i'가 일치하지 않으므로 부드러운 문장이 아닙니다.
구현 아이디어
확인 절차는 다음과 같습니다.
- 문장을 공백(
' ') 기준으로 분리하여 단어 배열을 만듭니다. - 배열을 순회하면서 현재 단어의 마지막 글자와 다음 단어의 첫 글자를 비교합니다.
- 일치하지 않는 지점이 발견되면 즉시
false를 반환하고, 모든 단어가 조건을 통과하면true를 반환합니다.
예제 코드
아래는 위 로직을 화살표 함수(arrow function)로 구현한 코드입니다.
const str = 'this stringt tries sto obe esmooth';
const str2 = 'this string is not smooth';
const isSmooth = str => {
const strArr = str.split(' ');
for(let i = 0; i < strArr.length; i++){
// 다음 단어가 없거나, 현재 단어의 마지막 글자와
// 다음 단어의 첫 글자가 일치하면 계속 진행
if(!strArr[i+1] || strArr[i][strArr[i].length - 1] === strArr[i+1][0]){
continue;
};
return false;
};
return true;
};
console.log(isSmooth(str));
console.log(isSmooth(str2));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
true false
코드 설명
split(' ') 메서드는 문자열을 공백 단위로 잘라 배열로 반환합니다. 반복문 안에서 strArr[i][strArr[i].length - 1]은 현재 단어의 마지막 문자를, strArr[i+1][0]은 다음 단어의 첫 번째 문자를 가리킵니다. 마지막 단어에 도달하면 비교할 다음 단어가 없으므로 !strArr[i+1] 조건으로 이를 처리해 검사를 건너뜁니다. 이 방식의 시간 복잡도는 O(n)으로, 문장 길이에 비례하여 효율적으로 동작합니다.