Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 문장이 '부드러운(smooth)'지 확인하는 방법

문장이 부드럽다(smooth)는 것은 무슨 의미일까요? 여기서 말하는 부드러운 문장이란, 문장을 구성하는 각 단어의 첫 글자가 바로 앞 단어의 마지막 글자와 동일한 경우를 뜻합니다. 즉, 단어와 단어가 끊김 없이 자연스럽게 이어지는 문장이라고 할 수 있습니다.

예를 들어 다음과 같은 문장을 살펴보겠습니다.

  • 'this stringt tries sto obe esmooth' → 각 단어의 시작 글자가 이전 단어의 끝 글자와 일치하므로 부드러운 문장입니다.
  • 'this string is not smooth' → 'string'의 끝 글자 'g'와 'is'의 첫 글자 'i'가 일치하지 않으므로 부드러운 문장이 아닙니다.

구현 아이디어

확인 절차는 다음과 같습니다.

  1. 문장을 공백(' ') 기준으로 분리하여 단어 배열을 만듭니다.
  2. 배열을 순회하면서 현재 단어의 마지막 글자와 다음 단어의 첫 글자를 비교합니다.
  3. 일치하지 않는 지점이 발견되면 즉시 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)으로, 문장 길이에 비례하여 효율적으로 동작합니다.