본문으로 바로가기

공백으로 구분되는 문자열이 있을 때,

가장 마지막 단어의 길이를 반환하는 코드를 짜시오.

LeetCode에서 푼 문제 리스트 보기

LeetCode에서 문제 보기

github에서 코드 보기

문제를 틀렸다면 보아야 할 사항

문자열을 (정확히 말하자면 오른쪽 공백 제거인 rstrip()이겠지만) strip()을 사용하여 문자열의 끝 쪽 공백을 지워주는 작업을 해주는게 좋다.  코드를 어떻게 짜느냐에 따라서 다르지만 input이  'a   ' 와 같다면, 공백을 문자열로 취급해서 오답을 토해낼 수도 있다.

문제 풀이

이 문제는 파이썬의 다양한 기본 내장 메소드들을 사용하여 문제를 해결할 수 있다. 방법은 아래에 써 두었다. LeetCode에서 돌려보았을 때는 Rumtime에서 차이가 없지만, 시간 복잡도를 생각해보면 맨 마지막 방법인 string을 마지막 index부터 접근하여 길이를 구하는 방법이 가장 시간이 적게 소요될 것 같다. 

방법 1. split(' ')을 사용해 공백을 기준으로 문자열을 단어별로 리스트의 원소로 구별한다. 맨 마지막 원소를 Index [-1] 로 접근하여 길이를 반환한다.

방법 2. 문자열을 뒤집어준 다음, 공백이 나올때까지의 길이를 세서 반환한다.

방법 3. 문자열의 맨 마지막 Index를 구하고 -1 만큼 줄여나가면서 공백이 나올때까지의 길이를 세서 반환한다.

파이썬 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
# 방법 1 (split 사용하기)
class Solution:
    def lengthOfLastWord(self, s: str-> int:
        """
        Runtime : faster than 75.54% of Python3
        Memory Usage: less than 6.04% of Python3
        """
        return len(s.strip().split(' ')[-1])
 
 
# 방법 2 (reversed 사용하기)
class Solution:
    def lengthOfLastWord(self, s: str-> int:
        """
        Rumtime : faster than 75.54% of Python3
        Memory Usage : less than 6.04% of Python3
        """
        count = 0
        for c in reversed(s.strip()):
            if c == " ":
                break
            count += 1
        return count
 
# 방법 3 (최대 Index 사용하기)
class Solution:
    def lengthOfLastWord(self, s: str-> int:
        """
        Rumtime : faster than 75.54% of Python3
        Memory Usage : less than 6.04% of Python3
        """
        count = 0
        string = s.strip()
        for i in range(len(string)-1-1-1):
            if string[i] == " ":
                break
            count += 1
 
        return count
 
cs