조건 : 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라.
ex ) ["d","o","g"] - > ["g","o","d"]
투 포인터를 이용한 방식은 2개의 포인터를 이용해 범위를 조정해가며 풀이하는 방식을 말합니다.
def reverseString(s):
left, right = 0 , len(s) -1
while left < right:
s[left] , s[right] = s[right], s[left]
left +=1
right -= 1
a = ["a","b","c"]
reverseString(a)
print(a)
['c', 'b', 'a']
함수의 첫 줄에는 left 에는 리스트의 제일 왼쪽 값의 인덱스를, right에는 리스트의 제일 오른쪽 값의 인덱스를 넣었다.
그 후 left가 right보다 작은 경우에는 s[left] 의 값과 s[right]의 값을 바꾸었다.
리스트의 개수가 홀수인지 짝수인지는 문제가 되지 않는다.
만약 짝수일 경우,
left = right 인 경우가 없을 것이고 리스트의 값들은 전부 한번씩 위치가 바뀔 것이다.
그리고 홀수인 경우에는,
정확히 중간에 있는 값은 left = right 인 경우이고 while문 밖으로 나오기 때문에 정상적으로 문자열 뒤집기를 수행할 수 있다.
def reverseString(s):
s.reverse()
# 입력값이 문자열일 경우 문자열 슬라이싱도 사용 가능하다.
# s = s[::-1]
reveres( ) 함수는 리스트에만 제공되는 함수이다.
위의 두 방식의 속도(실행시간)는 비슷하다.