문자열 뒤집기

JunHyeok Oh·2021년 5월 4일
0

Q: 문자열을 뒤집는 함수를 작성하라.

조건 : 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라.

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( ) 함수는 리스트에만 제공되는 함수이다.

위의 두 방식의 속도(실행시간)는 비슷하다.

profile
Univ of Seoul , Statistics

0개의 댓글