58. 마지막 단어의 길이

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

*마지막 단어에서 부터 공백을 만나기전까지의 길이를 반환합니다*


예 1:
입력: s = "Hello World"
출력: 5
설명: 마지막 단어는 길이가 5인 "World" 입니다.


예 2:
입력: s = "fly me to the moo  n"
출력: 1
설명: 마지막 단어는 길이가 1인 "n" 입니다.


예 3:
입력: : s = "luffy is still joyboy"
출력: 6
설명: 마지막 단어는 길이가 6인 "joyboy" 입니다.

문제 정리

1. 단어와 공백으로 구성된 s 문자열에서 마지막에 주어진 단어를 출력하는 문제이다.

생각한 방법

1. s 문자열의 마지막 인덱스부터 요소를 순회한다.
2. s 문자열 마지막에 공백이 존재할 수 있으므로, 공백을 만나면 문자열의 위치를 한 칸 앞으로 옮겨준다.
(문자열의 뒤에서부터 앞으로 이동)
3. s 문자열 마지막부터 s의 length까지 반복문을 돌면서 공백을 만나지 않는다면 최종적으로 반환할 변수에
count를 1씩 올려준다.(마지막 단어의 길이를 측정)
4. s 문자열의 포인터는 앞으로 한 칸 이동해야 하기 때문에 i에 1을 빼서 위치를 옮겨준다.

 

작성코드✍️

 

  function lengthOfLastWord(s) {
    let lastWordLength = 0;
    let i = s.length - 1; 

    //공백을 건너뛰는 조건문
    while (i >= 0 && s[i] === " ") {
      i--; 
    }
    
    //마지막 단어를 찾기 위한 조건문 
    while (i >= 0 && s[i] !== " ") {
      lastWordLength++;
      i--;
    }
    return lastWordLength;
  }

  let s = "Hello World  ";
  console.log(lengthOfLastWord(s));

 

for문을 사용하지 않고 while문을 사용한 이유?

for문과 while문 모두 문자열의 끝에서부터 검사하여 마지막 단어의 길이를 계산 할 수 있다.

하지만 while문을 사용하면 공백을 건너뛰는 작업과 길이를 계산하는 작업을 명확하게 구분이된다.

반면, for문을 사용한 방식은 두 작업을 동시에 처리해야하며 코드가 간결하긴하지만 하나의 함수안에는 한가지 기능을

명확하게 담는것이 좋기때문에 while을 선택했다.

 

만약 for문을 사용해서 문제를 푼다면 ?

  1. s문자열의 끝에서 시작하여, 뒤에서부터 문자를 검사한다.
  2. 문자가 공백이 아니면, 길이를 증가시키고 마지막 단어를 찾았음을 표시하는 findWord 변수를 true로 설정해준다.
  3. 문자가 공백이고 이미 마지막 단어를 찾았다면 (findWord === true인 경우), for문을 종료하고 마지막 단어의 길이를 반환한다.

 

 for문을 활용한 풀이 방법✍️

  function lengthOfLastWord(s) {
    let lastLength = 0;
    let findWord = false;

    for (let i = s.length - 1; i >= 0; i--) {
      if (s[i] !== " ") {
        lastLength++;
        findWord = true;
      } else if (findWord === true) {
        break;
      }
    }
    return lastLength;
  }

  let s = "Hello World ";
  console.log(lengthOfLastWord(s));

'알고리즘 > leetCode' 카테고리의 다른 글

[leetcode] Sqrt(x)  (0) 2023.03.21
[leetcode] Plus One  (0) 2023.03.17
[leetcode] Search Insert Position  (0) 2023.03.17
[leetcode] Find the Index of the First Occurrence in a String  (0) 2023.03.15
[leetcode] Remove Element  (0) 2023.03.14
복사했습니다!