728x90
문자열과 백터 순서 뒤집기
∙ 문자열 뒤집기
- 문자열의 각 문자 순서를 역순으로 변경 (Palindrome)
- 문자열을 역순으로 뒤집는 방법은 여러 가지 있지만, 스택을 사용하여 변경할 수 있음
ex) "Hello" -> "olleH" , "ALGORITHM" -> "MHTIROGLA"
∙ 스택을 이용한 문자열 뒤집기
- 문자열의 각 문자를 스택에 push한 후, 다시 스택에서 문자를 하나씩 pop 하여 출력 문자열을 생성
∙ 예시 코드
#include <iostream>
#include <stack>
using namespace std;
string reverse(const string& str)
{
stack<char> stk;
for (char c : str)
stk.push(c);
string res;
while (!stk.empty()){
res += stk.top();
stk.pop();
}
return res;
}
int main()
{
string str1 = "HELLO";
string str2 = "ALGORITHM";
cout << str1 << " -> " << reverse(str1) << endl;
cout << str2 << " -> " << reverse(str2) << endl;
}
∙ 벡터 순서 뒤집기
- 벡터의 원소를 역순으로 변경하는 작업
- 벡터를 역순으로 뒤집는 방법은 여러 가지 있지만, 스택을 사용하여 변경할 수 있음
∙ 스택을 이용한 벡터 순서 뒤집기
- 벡터의 모든 원소를 스택에 push한 후, 다시 스택에서 원소를 하나씩 pop 하여 차례대로 벡터에 넣음
∙ 예시 코드
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
template <typename T>
void reverse(vector<T>& vec)
{
stack<T> stk;
for (const auto& e : vec)
stk.push(e);
for (int i = 0; i < vec.size(); i++){
vec[i] = stk.top();
stk.pop();
}
}
int main()
{
vector<int> vec {10, 20, 30, 40, 50};
reverse<int>(vec);
for (auto e : vec)
cout << e << ", ";
cout << endl;
vector<string> vec1 {"Hello", "loves", "Happy"};
reverse<string>(vec1);
for (auto a : vec1)
cout << a << ", ";
cout << endl;
}