🤔 나의 풀이
📌 문제
- 파이썬 알고리즘 인터뷰 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에만 제공이 된다.