문제 :
입력값으로 하나의 문자열이 주어지고, 이 문자열을 모두 뒤집어서 리턴하면 성공! 사실 이 문제는 너무 쉬워서 포스팅을 스킵하려 했으나, 내가 까먹었다가 다시 기억난 부분이 있어 포스팅을 해 보겠다.
아래는 내가 제출해 통과한 코드이다.
class Solution:
def reverseWords(self, s: str) -> str:
words = s.split()
res = []
for i in words:
res.append(i[::-1])
return ' '.join(res)
- s.split() : 여기서도 고민한 부분이 있었는데, split의 인자로 ''를 넣어야 하나, ' '를 넣어야 하나 고민을 하고 검색을 해본 결과, split의 인자가 비어있으면 파이썬은 자동으로 문자열을 공백을 기준으로 나눠준다. words라는 변수 안에 입력값으로 받은 문자열 s를 공백을 기준으로 나누어 준다.
- 결괏값을 담을 res 배열을 선언 해준다. 다시 한번 강조하지만, 파이썬의 문자열은 불변의 객체이므로 문자열 원본 자체를 바꿀 순 없고, 새로운 배열에 담아 .join을 이용해 합쳐 문자열로 반환 해야한다.
- 이제 words에는 공백을 기준으로 나누어진 문자열들이 담겼을 것이다. for문으로 순회하며 각각의 단어들을 뒤집어 res 배열에 담아준다. 여기서도 등장했다. 문자열을 뒤집는 가장 편한 방법인 파이썬의 문자열, 리스트 슬라이싱을 이용해[::-1] 문자열을 뒤집어 주었다.
- return ' '.join(res) 여기서 내가 까먹었다가 다시 기억한 부분이다. 난 처음에 ''.join을 했지만, 이렇게 하니
"s'teL ekat edoCteeL tsetnoc"
이렇게 찍히는것이 아니라
"s'teLekatedoCteeLtsetnoc"
이렇게 찍히는 것이였다. 그래서 어떡하지를 고민 하던 중, .join 메서드에 대해 다시 생각을 해 보았다. join메서드는 앞에 구분자를 지정해 주어야 한다. 앞에 나오는 구분자에 따라 리스트를 문자열로 합친다.
예를들어,
1. ''.join(s) : 이건 s라는 리스트의 모든 요소들을 중간 공백 없이 합친다 예) [a,b,c] => "abc"
2. ' '.join(s): 이건 s라는 리스트의 모든 요소들을 공백 하나로 구분지어 합친다. 예) [a,b,c] => "a b c"
3. ', '.join(s): 이건 s라는 리스트의 모든 요소들을 쉼표 하나로 구분지어 합친다. 예) [a,b,c] => "a, b, c"
4. '! '.join(s): 이건 s라는 리스트의 모든 요소들을 느낌표 하나로 구분지어 합친다. 예) [a,b,c] => "a! b! c"
'CodingTest > Leetcode' 카테고리의 다른 글
[LeetCode] 876. Middle of the Linked List (0) | 2024.07.17 |
---|---|
[LeetCode] 832. Flipping an Image (0) | 2024.07.12 |
[LeetCode] 541. Reverse String II (1) | 2024.07.09 |
[LeetCode] 345. Reverse Vowels of a String (0) | 2024.07.04 |
[LeetCode] 234. Palindrome Linked List (0) | 2024.07.04 |