02. Reverse String

eunseo kim 👩‍💻·2021년 1월 14일
0
post-custom-banner

🎯 leetcode - 344. Reverse String


🤔 나의 풀이

📌 문제

- 파이썬 알고리즘 인터뷰 2번 문제

📌 날짜

2020.01.14

📌 시도 횟수

2 try

💡 Code

1번 방법

class Solution:
    def reverseString(self, s: List[str]) -> None:
        s = s[::-1]
        print(s)

2번 방법

class Solution:
    def reverseString(self, s: List[str]) -> None:
        for i in range(int(len(s) / 2)):
            s[i], s[len(s) - i - 1] = s[len(s) - i - 1], s[i]
        print(s)

💡 문제 해결 방법

1번 방법
- 슬라이싱을 이용하여 list를 거꾸로 뒤집었다.
2번 방법
- 앞에서부터 출발하는 인덱스가 list의 절반에 도달할 때까지 for문을 반복
- 앞에서부터 출발하는 인덱스는 i
- 뒤에서부터 출발하는 인덱스는 len(s) - 1 - i
- 내부 swap을 이용해 list 내부에서 처리하였다.

💡 새롭게 알게 된 점

1번
- list도 문자열처럼 슬라이싱으로 처리할 수 있다.

❌ (한번에 맞추지 못한 경우) 오답의 원인

1번이 leetcode에서 오류가 떴다.
- 리스트 내부를 직접 조작하라는 공간적 제약(O(1)) 때문에 변수 할당 처리에 제약이 있었다.
- 책에 의하면 s[:] = s[::-1]의 트릭을 이용하여 처리하면 오류 없이 잘 동작한다고 한다.

😉 다른 풀이

📌 하나. 투 포인터를 이용한 스왑

class Solution:
    def reverseString(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
        print(s)

💡 새롭게 알게 된 점

- 투 포인터란, 2개의 포인터를 이용해 범위를 조정해가며 풀이하는 방식이다.
- 위의 코드는 점점 더 범위를 좁혀가며 스왑하는 형태로 풀이한 방식이다. 

📌 둘. 파이썬의 reverse() 함수

class Solution:
    def reverseString(self, s: List[str]) -> None:
        s.reverse()

💡 새롭게 알게 된 점

- reverse()는 list에만 제공이 된다.
profile
열심히💨 (알고리즘 블로그)
post-custom-banner

0개의 댓글