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문을 사용해서 문제를 푼다면 ?
- s문자열의 끝에서 시작하여, 뒤에서부터 문자를 검사한다.
- 문자가 공백이 아니면, 길이를 증가시키고 마지막 단어를 찾았음을 표시하는 findWord 변수를 true로 설정해준다.
- 문자가 공백이고 이미 마지막 단어를 찾았다면 (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 |