C++에서는 스택(stack), 제자리(in-place) 방식, 반복문(iteration) 등 다양한 방법으로 문자열을 뒤집을 수 있습니다. 이 글에서는 가장 기본적인 반복문 방식으로 문자열을 뒤집는 알고리즘과 예제 코드를 소개합니다.
알고리즘
START
Step-1: 문자열을 입력받는다
Step-2: length() 메서드로 문자열의 길이를 구한다
Step-3: for 루프를 사용해 마지막 문자와 첫 번째 문자를 서로 교환한다
Step-4: 결과를 출력한다
END위 알고리즘의 핵심 아이디어는 다음과 같습니다. 문자열 양쪽 끝에 있는 두 문자를 가운데 방향으로 이동하면서 서로 맞바꾸면, 전체 문자열이 자연스럽게 뒤집힙니다. 교환은 문자열 길이의 절반(n / 2)만큼만 진행하면 되기 때문에 효율적입니다.
예제 코드
아래는 위 알고리즘을 C++로 구현한 코드입니다.
#include <bits/stdc++.h>
using namespace std;
void strReverse(string& str){
int n = str.length();
// 두 끝에서부터 시작해 문자를 교환
cout<<"interative reverse (Tomhanks)::";
for (int i = 0; i < n / 2; i++)
swap(str[i], str[n - i - 1]);
}
int main(){
string str = "Tomhanks";
strReverse(str);
cout << str;
return 0;
}코드 설명
strReverse(string& str)함수는 참조(&)로 문자열을 받아 원본 문자열 자체를 수정합니다.n = str.length()로 문자열의 총 길이를 구한 뒤, 인덱스i와n - i - 1위치의 문자를swap()함수로 교환합니다.- 루프가
n / 2번만 돌면 모든 문자가 뒤집히므로, 시간 복잡도는 O(n/2), 즉 O(n)입니다. - 공간 복잡도 역시 추가 배열 없이 제자리에서 처리되므로 O(1)입니다.
실행 결과
위 코드를 컴파일하여 실행하면 입력 문자열 "Tomhanks"가 아래와 같이 거꾸로 출력됩니다.
Iterative reverse (Tomhanks):: sknahmoT
이처럼 반복문과 swap 연산만으로도 간단하게 문자열을 뒤집을 수 있습니다. C++ 표준 라이브러리에는 std::reverse(str.begin(), str.end()) 같은 편리한 함수도 있으니, 실무에서는 상황에 맞게 선택해 사용하면 됩니다.