공백으로 구분되는 문자열이 있을 때,
가장 마지막 단어의 길이를 반환하는 코드를 짜시오.
문제를 틀렸다면 보아야 할 사항
문자열을 (정확히 말하자면 오른쪽 공백 제거인 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 |
'온라인 코딩 테스트 문제 풀이 > LeetCode 문제 풀이' 카테고리의 다른 글
Python으로 푸는 LeetCode 657. Robot Return to Origin (Easy) (0) | 2019.04.16 |
---|---|
Python으로 푸는 LeetCode 67. Add Binary (Easy) (0) | 2019.04.14 |
Python으로 푸는 LeetCode 55. Jump Game (Medium) (0) | 2019.04.10 |
Python으로 푸는 LeetCode 63. Unique Paths II (Medium) (0) | 2019.04.09 |