logoStephen's 기술블로그

포스트 검색

제목, 태그로 포스트를 검색해보세요

[LeetCode] Length of Last Word

[LeetCode] Length of Last Word
CodingTest
성훈 김
2025년 8월 27일
목차

문제 링크

문제 요구 조건

  • 문자열의 스페이스를 제외한 마지막 단어의 길이를 구하라

나의 문제 풀이

이번 문제는 상당히 간단한 문제였다. 하지만, 빈칸이 한칸이 아니라 여러칸일 경우에 split함수는 여러 빈칸 마저 배열로 만든다는 것은 새로 알게되었다. 예를 들어 ‘ word ‘ 란 단어에 빈칸이 두 칸이상 들어가게 되는데 spilit(’ ‘) 함수를 사용했더니, [ '', '', '', 'word', '', '', '' ] 이렇게 반환이 되었다.
 
따라서 추가적인 ‘’ 검증 로직이 필요했고, 문제를 풀 수 있었다.
 
나의 문제 풀이 코드
JavaScript
/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function(s) {
    const splitted = s.split(" ");
    const last = splitted.length - 1;
 
    for (let i = last ; i >= 0 ; i--){
        const word = splitted[i].trim();
        if (word !== ''){
            return word.length
        }
    }
    return;
};
 
문제 풀이 과정은 다음과 같다.
  1. split(’ ‘) 함수로 빈 공간(space)을 기준으로 단어를 나눈다.
  1. last 인덱스를 설정한다.
  1. last 인덱스를 활용해서 거꾸로 순회하는 for문을 만든다.
  1. 마지막 인덱스부터 차례대로 빈공간을 trim하고 단어 검증한다.
 

성능 측면 결과

notion image
 
이걸 보자마자 아니 이 단순한 로직보다 빠른 결과를 내는 방식이 있다는 게 놀라웠다. 나의 풀이 속도보다 두배빠른 방법이라니
 

최고의 성능을 낸 문제풀이

코드를 보고 느낀점은 spilt(/\\s+)으로 공백을 정규표현식으로 제거할 수 있다는 것을 새롭게 알게 되었다.
 
최고 성능을 낸 코드
JavaScript
let lengthOfLastWord = (s) => {
    let word = s.trim();
    return word.split(/\s+/).pop().length
}
 
정규표현식의 의미는 다음과 같다.
  • \s 는 모든 종류의 공백문자 (스페이스 바, 탭, 줄 바꿈 등)을 의미한다.
  • + 는 바로 앞의 문자가 ‘하나 이상’ 연속으로 나올 경우를 의미한다.
  • 따라서 /\s+/ 는 하나 이상의 연속된 공백을 하나의 문자열로 취급할 수 있다.
 
오늘도 새로운 지식을 취득하였다 :)