문자열 s가 주어졌다고 가정해 봅시다. 이 문자열은 영어 알파벳과 공백(white-space)을 포함할 수 있습니다. 우리가 해야 할 일은 이 문자열에서 마지막 단어의 길이를 구하는 것이며, 만약 마지막 단어가 존재하지 않는다면 0을 반환하면 됩니다.
예를 들어, 입력 문자열이 "I love Programming"이라면 마지막 단어는 "Programming"이고, 그 길이는 11이므로 출력 결과는 11이 됩니다.
문제 해결 접근 방법
이 문제는 다음과 같은 단계로 해결할 수 있습니다.
- 결과를 저장할 변수 n을 0으로 초기화합니다.
- 문자열을 단어 단위로 분리하여 각 단어(temp)를 순회합니다.
- 순회할 때마다 n에 현재 단어의 길이를 저장합니다. 이렇게 하면 반복이 끝난 후 n에는 자연스럽게 마지막 단어의 길이가 남게 됩니다.
- 모든 단어를 확인한 후 n을 반환합니다.
C++ 구현 예제
아래 코드는 C++의 stringstream을 활용한 구현입니다. stringstream은 문자열을 스트림처럼 다룰 수 있게 해주며, >> 연산자를 사용하면 공백을 기준으로 단어를 자동으로 분리해 줍니다.
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int lengthOfLastWord(string s){
stringstream str(s);
string temp;
int n = 0;
while (str >> temp)
n = temp.size();
return n;
}
};
main(){
Solution ob;
cout << (ob.lengthOfLastWord("I love Programming"));
}입력
"I love Programming"
출력
11
코드 설명
동작 과정을 살펴보면 다음과 같습니다.
- 입력 문자열 "I love Programming"을
stringstream객체 str에 담습니다. while (str >> temp)반복문은 추출할 단어가 남아 있지 않을 때까지 실행됩니다.- 첫 번째 반복에서 temp는 "I"가 되고 n은 1이 됩니다.
- 두 번째 반복에서 temp는 "love"가 되고 n은 4가 됩니다.
- 세 번째 반복에서 temp는 "Programming"이 되고 n은 11이 됩니다.
- 더 이상 단어가 없으면 반복문이 종료되고, 최종적으로 n인 11이 반환됩니다.
이 방식의 장점은 문자열 끝에 불필요한 공백이 포함되어 있어도 stringstream이 자동으로 공백을 무시하고 단어만 추출하기 때문에 별도의 공백 처리 로직이 필요하지 않다는 점입니다. 시간 복잡도는 문자열의 길이에 비례하여 O(n)이며, 공간 복잡도 역시 O(n)입니다.