본문 바로가기

코딩 및 기타/어서와! 자료구조와 알고리즘

10일차

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;
    
    
    
}

'코딩 및 기타 > 어서와! 자료구조와 알고리즘' 카테고리의 다른 글

12일차  (0) 2023.08.20
11일차  (0) 2023.08.17
9일차  (0) 2023.08.15
8일차  (0) 2023.08.13
캐스팅 (형변환)  (0) 2023.08.13