본문 바로가기

❓ 문제

Given a string s consisting of words and spaces, return the length of the last word in the string.

 

단어와 공백으로 구성된 문자열 s가 주어지면 문자열의 마지막 단어 길이를 반환합니다.

 

A word is a maximal substring consisting of non-space characters only.

 

단어는 공백이 아닌 문자로만 구성된 최대 부분 문자열입니다.

Example 1

Input: s = "Hello World"
Output: 5
Explanation: The last word is "World" with length 5.

Example 2

Input: s = "   fly me   to   the moon  "
Output: 4
Explanation: The last word is "moon" with length 4.

Example 3:

Input: s = "luffy is still joyboy"
Output: 6
Explanation: The last word is "joyboy" with length 6.

❗ 내 답변

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function(s) {
    const splited = s.split(' ');
    const result = splited.filter(s => s).map(s => s.trim());
    return result[result.length - 1].length;
};

이번 문제는 너무 쉬워서 푸는 데 5분도 안 걸린 것 같다.
공백으로 문자열을 나누고,
나눠진 문자열에도 공백이 있을 수 있으니 filter()로 제거하고,
문자열 양 끝에 포함된 공백도 한 번 더 trim() 으로 제거 시켜 줬다.
그리고 배열에 담긴 마지막 문자열의 길이를 반환!

 

❗ Runtime이 가장 빨랐던 답변과 비교

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function(s) {
    s = s.trim();
    s = s.split(" ");

    return s[s.length-1].length;
};

이렇게도 가능한건가..?! 싶었는데 생각해보니 가능하다.
trim()으로 문자열 양 끝의 공백을 제거하고,
공백으로 split 시켜준다.
split 한 배열에 다른 공백들이 요소로 포함된다고 해도
어차피 제공된 문자열의 양 끝의 공백을 이미 제거했기 때문에
맨 마지막 요소는 적절하게 공백이 제거된 유효한 문자열이 담기게 된다.
그리고 배열에 담긴 마지막 문자열의 길이를 반환!

한 끗 차이로 내 코드보다 훨씬 깔끔한 코드였다.

 

❗ Memory 사용이 가장 적었던 답변과 비교

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function (s) {
    let len = 0;
    //loops from end to start (Backward Direction)
    for (let i = s.length - 1; i >= 0; i--) {
        if (s[i] === ' ' && len )
            return len;
        if (s[i] != ' ')
            len++;
    }
       return len; 
}

ES5/6를 사용 않고 바닐라JS로 푼 답안이다.
주어진 문자열의 뒤에서 부터 반복을 돈다.
현재 문자가 공백이 아니라면 len을 증가시킨다.
현재 문자가 공백이고 len이 0 아니라면 len을 반환한다.

💡 개선 방안

너무 꼬아서 생각하지말고, 불필요한 로직은 과감히 버리자

Seize the day!

Spring MVC | Spring Boot | Spring Security | Mysql | Oracle | PostgreSQL | Vue.js | Nuxt.js | React.js | TypeScript | JSP | Frontend | Backend | Full Stack | 자기계발 | 미라클 모닝 | 일상