나는 이 문제를 세 방법으로 풀어봤다.
처음엔 배열 두개만들어서 하면 되지 않을까 했지만 라이브러리가 있을 것 같아서 바로 찾아봤다.
역시 라이브러리가 있어 바로 라이브러리를 사용했다.
하지만 reverse를 사용하지 않고는 어떻게 풀 수 있을까 라는 이야기를 듣고 두번째는 stack라이브러리를 사용해서 구현하였다. 라이브러리를 아예 사용하지 않으면 어떻게 풀 수 있겠냐는 이야기를 듣고 마지막으로 배열만을 이용해 구현해보았다.
1. 알고리즘 라이브러리를 사용
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string a;
int main() {
while(1) {
getline(cin, a);
if (a == "END")
break;
reverse(a.begin(), a.end());
cout << a << "\n";
}
}
- reverse 함수 구현법을 알게되었다.
- 처음에는 cin 으로 string을 받으려고 했는데 공백 문자를 포함하지 않는 것이었다..
- 처음 코드는 getline코드와 if문의 순서를 바꿔써서 출력이 되지 않았다..
2. reverse를 쓰지 않고 stack으로 구현
#include<iostream>
#include<string>
#include<stack>
using namespace std;
string reverse(string str)
{
stack<char>st;
int a = 0;
string temp = "";
for (int i = 0; i < str.size(); i++) {
st.push(str[i]);
}
a = st.size();
for (int i = 0; i < a; i++) {
temp += st.top();
st.pop();
}
return temp;
}
string a;
int main() {
while(1) {
getline(cin, a);
if (a == "END")
break;
cout<<reverse(a)<<"\n";
}
}
- string의 초기값은 비어있기때문에 index를 사용할 수 없다라는 것을 모르고 처음엔 temp[i] = st.top을 썼다.
- 두번째 for문을 보면 원래 a 대신 st.size를 사용했었다. 하지만 이걸 사용하니 stack사이즈가 점점 줄어 제대로 반복문이 돌지 않았다.
- temp에 더하기 연산을 해서 값을 넣을 수 있다는 사실 temp += st.top(); 이게 제일 신기했다.
- 하지만 반복문 하나에 해결할 수 있을 거라는 이야기를 듣고 다시 고쳐보았다.
#include<iostream>
#include<string>
using namespace std;
string reverse(string str)
{
int a = 0;
string temp = "";
a = str.size();
for (int i = (a-1); i >= 0; i--) {
temp += str[i];
}
return temp;
}
string a;
int main() {
while(1) {
getline(cin, a);
if (a == "END")
break;
cout<<reverse(a)<<"\n";
}
}
- 처음에 for문이 제대로 작동되지 않았다. for(int i = a; i<0;i--)이렇게 썼었다. 안 되는게 당연한건데.. 범위를 고쳐서 for(int i = a; i > 0; i--)했더니 첫 문자가 제대로 출력되지 않았다.
K | I | N | G |
0 | 1 | 2 | 3 |
- 위의 글자는 size가 4이다. 하지만 index 번호는 3번까지 밖에 없기때문에 str[4]는 아무것도 참조할 수 없다. for(int i= (a-1); i>=0; i--)로 고치고 제출하니 정답이었다!
처음으로 한 문제를 여러 방법으로 풀어본 것 같다. 재미있는 경험이었다...! 내일은 실버 한 문제를 풀어야하는데.. 어려울 것 같아서 풀기 싫다.

'공부' 카테고리의 다른 글
BOJ 11004 해결, 시간 초과 (0) | 2022.01.13 |
---|---|
BOJ 9012 해결과 고찰.....(최악) (0) | 2022.01.12 |
BOJ 1475 해결과 고찰 (9) | 2022.01.07 |
BOJ 10808 (0) | 2022.01.06 |
BOJ 1181, 10828 문제 해결과 고찰 (0) | 2022.01.06 |