본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+ Java언어 내용도 포함되어있습니다. )
1.문제설명
- 임의의 문자열을 넣어 해당 문자열이 거꾸로 출력될 수 있는 알고리즘을 만든다.
- vector의 순서를 뒤에서부터 앞으로 순서를 재배치하는 알고리즘을 만든다
2. 문제해결 접근
2_1) 스택을 이용한 문자열 뒤집기
- 문자열의 각 문자를 스택에 push한 후, 다시 스택에서 문자를 하나씩 pop하여 문자열을 생성
문자열을 받아 담을 수 있는 stack을 선언한다.
해당 문자열을 하나씩 뽑아 정렬하여 문자열을 역순으로 정렬한다.
벡터 순서 뒤집기
vector값을 담을 수 있는 스택을 만든다
해당 스택에 vector값 원소를 하나씩 담은 뒤,
스택에서 값을 꺼내어 vector를 재정의한다.
3.답안 : [언어 : ]
4. C++ 답안
#include <iostream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
// 문자열 하나를 인자로 받아 , 뒤집은 문자를 반환하는 형태로구성
string reverse(const string& str)
{
//stack 초기화
stack<char> stk;
//for문으로 str의 문자를 로 받아 반복하여
for (char c : str)
// push로 stk에 넣어준다.
stk.push(c);
// 뒤집은 문자를 담아줄 변수 res를 선언
string res;
// stk가 빌때까지 반복한다
while (!stk.empty()) {
//res에 더해준다
res += stk.top();
// 그리고, stk의 문자를 하나씩 pop() 제거한다,.
stk.pop();
}
return res;
}
template <typename T>
// vector 순서 뒤집기
void reverse(vector<T>& vec)
{
// stack<T, vector<T>> stk(vec); //아래의 3줄의 코드를 대체할 수 있는 코드이다
stack<T> stk;
for (const auto& e : vec)
stk.push(e);
for (int i = 0; i < vec.size(); i++) {
// vec[i]를 선언해주고, stk에서 원소를 하나씩 뽑아 담아준다
vec[i] = stk.top();
//담아준 stk원소를 하나씩 뽑아 제거해준다 -> pop()
stk.pop();
}
}
int main()
{
string str1 = "HELLO";
string str2 = "ALGORITHM";
//str1과 str2를 각각 reverse()에 담아
cout << str1 << " -> " << reverse(str1) << endl;
cout << str2 << " -> " << reverse(str2) << endl;
// vector<int> vec {10, 20, 30, 40, 50};
// reverse<int>(vec);
vector<string> vec {"John", "loves", "Jane"};
reverse<string>(vec);
for (auto e : vec)
cout << e << ", ";
cout << endl;
}
5. C++ 문법 설명과 표현법
'알고리즘' 카테고리의 다른 글
[프로그래머스]Lv0. 최댓값 만들기 (0) | 2022.10.28 |
---|---|
[프로그래머스]Lv0.짝수는 싫어요 (0) | 2022.10.24 |
[프로그래머스]Lv0.중앙값 구하기 (0) | 2022.10.24 |
[프로그래머스]Lv0.편지 * (0) | 2022.10.23 |
[프로그래머스]Lv0.머쓱이보다 키 큰사람 * (0) | 2022.10.23 |