문제 링크
https://leetcode.com/problems/reverse-string/
나의 풀이
소스 코드
from typing import List
class Solution:
def my_solution(self, s: List[str]) -> None:
string = ''.join(s)
s.clear()
for char in string[::-1]:
s.append(char)
문제 풀이
1. 투 포인터(Two Pointer)를 이용한 스왑
소스 코드
from typing import List
class Solution:
# 2개의 포인터를 이용해 범위를 조정해가면서 푸는 방식
def solution1(self, s: List[str]) -> None:
left, right = 0, len(s) - 1
while left < right:
# 스왑 후 포인터 조정
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
2. 파이썬다운 방식 (Pythonic way)
소스 코드
from typing import List
class Solution:
# 그냥 reverse() 한 줄이면 끝. 참 쉽죠?
# 실행 속도도 내가 푼 방법과 거의 동일
def solution2(self, s: List[str]) -> None:
s.reverse()
3. 슬라이싱을 사용하여 푸는 방법
소스 코드
class Solution:
# 문자열 뿐만 아니라 리스트도 슬라이싱을 쓸 수 있음
def solution2_1(self, s: List[str]) -> None:
s[:] = s[::-1]
# 단, 아래 코드는 리트코드에서 에러로 간주
# (공간 복잡도를 O(1)로 제한하기 때문)
# s = s[::-1]
배운 점
- 리스트를 뒤집는 방법은 굳이 문자열로 조인하여 슬라이싱할 필요가 없이 그냥 리스트에서 슬라이싱을 사용하거나 리스트의
reverse()
메소드를 사용하면 된다. 이렇게 간단한 방법을 모르고 있었다...! - 슬라이싱을 사용하여 풀 때 에러가 나는 경우는 리트코드를 제외한 다른 플랫폼에서 다르게 동작할 수도 있으므로 실제 코딩 테스트를 치루기 전에 해당 플랫폼에 대해서 사전에 충분히 숙지해두는 것이 좋을 것 같다.