Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 문자열 뒤집기: 슬라이싱, reversed(), 재귀 함수까지 완벽 정리

Python에서 문자열을 뒤집는 방법은 크게 세 가지입니다. 슬라이싱(slicing), reversed() 함수, 그리고 재귀 함수(recursion)를 활용하는 것인데요. 흥미롭게도 Python에는 문자열을 뒤집기 위해 특별히 설계된 내장 함수는 존재하지 않습니다.


왜 문자열 뒤집기를 알아야 할까요?

Python으로 개발하다 보면 문자열의 순서를 거꾸로 바꿔야 하는 상황이 종종 발생합니다. 예를 들어 게임을 개발한다고 가정해 봅시다. 사용자가 자신의 이름을 입력하면 프로그램이 이를 거꾸로 뒤집어 닉네임을 생성해 주는 기능을 만들 수 있습니다.

문자열 뒤집기는 실무에서 매우 자주 사용되는 연산은 아니기 때문에 Python에도 전용 내장 함수가 없습니다. 하지만 코딩 면접에서 단골로 등장하는 주제이며, 실제 활용 사례도 몇 가지 있기 때문에 반드시 익혀두는 것이 좋습니다.

이 글에서는 Python에서 문자열을 뒤집는 세 가지 방법을 예제 코드와 함께 하나씩 살펴보겠습니다.

Python에서 문자열을 뒤집는 3가지 방법

  • [::-1] 슬라이싱 문법을 사용해 문자열을 역순으로 복사하기
  • reversed() 함수로 역방향 이터레이터(reverse iterator)를 만들어 순회하기
  • 재귀 함수(recursive function)를 직접 구현하기

방법 1: 슬라이싱([::-1])으로 문자열 뒤집기

Python 문자열을 슬라이싱할 때 [::-1] 문법을 사용하면 문자열의 복사본을 역순으로 손쉽게 만들 수 있습니다. 이 문법은 문자열의 모든 문자를 가져오되, 뒤에서부터 앞으로 한 칸씩 이동하며 읽어옵니다.

예를 들어 "Python"이라는 문자열을 역순으로 출력해 보겠습니다.

string = "Python"
reversed_string = string[::-1]

print(reversed_string)

실행 결과:

nohtyP

위 코드에서는 변수에 저장된 "Python" 문자열 끝에 [::-1] 문법을 붙여 뒤집힌 문자열을 새로운 변수에 저장했습니다.

이 방법의 가장 큰 장점은 코드가 짧고 간결하다는 점입니다. 문자열 끝에 [::-1]만 추가하면 되니까요. 다만 문법 자체만 봐서는 '문자열을 뒤집는다'는 의도가 명확하게 드러나지 않아, 가독성을 중시하는 개발자들은 이 방법을 피하기도 합니다.

방법 2: reversed()와 join() 함수로 문자열 뒤집기

Python에는 역방향 이터레이터를 생성하는 내장 함수인 reversed()가 있습니다. 문자열은 인덱스로 각 문자에 접근할 수 있는 시퀀스 타입이기 때문에, 이 이터레이터를 활용해 문자열 요소들을 역순으로 순회할 수 있습니다.

먼저 reversed()를 for 반복문과 함께 사용해 문자열을 한 글자씩 역순으로 출력해 보겠습니다.

for char in reversed("Python"):
    print(char)

실행 결과:

n
o
h
t
y
P

각 문자가 새로운 줄에 출력된 이유는 for 반복문 안에서 reversed()를 사용했기 때문입니다. 만약 결과를 한 줄로 연결해서 얻고 싶다면 join() 메서드를 함께 사용해야 합니다.

join() 메서드는 reversed() 이터레이터가 반환하는 모든 문자를 하나의 문자열로 합쳐 줍니다.

"".join(reversed("Python"))

실행 결과:

nohtyP

이 방법은 슬라이싱 방식처럼 간결할 뿐만 아니라, 코드의 의도를 훨씬 명확하게 전달한다는 추가적인 장점이 있습니다. reversed()join()을 처음 보는 사람이라도 함수 이름만으로 무엇을 하는 코드인지 쉽게 짐작할 수 있습니다.

방법 3: 재귀 함수(Recursion)로 문자열 뒤집기

재귀(Recursion)란 컴퓨터 과학에서 함수가 자기 자신을 직간접적으로 다시 호출하는 방식을 의미합니다. 재귀 함수를 사용하면 다음과 같이 문자열을 뒤집을 수 있습니다.

def reverse_string(string):
    if len(string) == 0:
        return string
    else:
        return reverse_string(string[1:]) + string[0]

reverse_string("Python")

실행 결과:

nohtyP

이 방법 역시 슬라이싱을 활용하지만, 앞서 살펴본 단일 슬라이싱 연산 대신 reverse_string이라는 함수를 직접 정의했습니다.

동작 원리를 살펴보면 다음과 같습니다. 먼저 함수는 뒤집고자 하는 문자열을 인수로 받습니다. 문자열이 비어 있다면 그대로 반환하고, 그렇지 않으면 string[1:](첫 번째 문자를 제외한 나머지 부분)를 인수로 넘기며 자기 자신을 다시 호출합니다. 그리고 재귀 호출의 결과 뒤에 첫 번째 문자(string[0])를 덧붙입니다. 이 과정이 반복되면 문자열 전체가 역순으로 조립됩니다.

이 방식은 논리적으로 우아해서 많은 Python 개발자들이 선호하는 기법이지만, 문자열이 매우 길 경우 재귀 호출 깊이 제한(recursion limit)에 걸릴 수 있다는 점은 유의해야 합니다.

마치며

Python에는 문자열을 뒤집는 전용 내장 함수가 없지만, 지금까지 살펴본 것처럼 여러 가지 효과적인 대안이 있습니다.

  • [::-1] 슬라이싱: 가장 빠르고 간결한 방법
  • reversed() + join(): 가독성이 뛰어난 방법
  • 재귀 함수: 로직을 직접 구현하며 학습 효과가 높은 방법

세 가지 방법 모두 각자의 장단점이 있으므로, 상황과 코드의 목적에 맞게 선택하시면 됩니다. 코딩 테스트나 면접 준비를 위해서라면 세 가지 방식을 모두 이해하고 있어야 합니다.