문제 링크
문제 요구 조건
- 문자열의 스페이스를 제외한 마지막 단어의 길이를 구하라
나의 문제 풀이
이번 문제는 상당히 간단한 문제였다. 하지만, 빈칸이 한칸이 아니라 여러칸일 경우에
split함수
는 여러 빈칸 마저 배열로 만든다는 것은 새로 알게되었다. 예를 들어 ‘ word ‘
란 단어에 빈칸이 두 칸이상 들어가게 되는데 spilit(’ ‘)
함수를 사용했더니, [ '', '', '', 'word', '', '', '' ]
이렇게 반환이 되었다. 따라서 추가적인
‘’
검증 로직이 필요했고, 문제를 풀 수 있었다. 나의 문제 풀이 코드
/** * @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; };
문제 풀이 과정은 다음과 같다.
split(’ ‘)
함수로 빈 공간(space
)을 기준으로 단어를 나눈다.
- last 인덱스를 설정한다.
- last 인덱스를 활용해서 거꾸로 순회하는 for문을 만든다.
- 마지막 인덱스부터 차례대로 빈공간을
trim
하고 단어 검증한다.
성능 측면 결과

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