언어/c, c++
(백준BAEKJOOB )- 9093번 -단어 뒤집기 "c++"
깡 딱
2023. 3. 5. 20:37
728x90
스택을 이용하여 문제를 풀었다.
먼저
cin.ignore(); //버퍼 비우기
// sentence[i] 연산자 오버로딩
이 내용은 내가 알지 못하여서 인터넷으로 찾아봤다.
while (T--) //t -- 까지 결국 인덱스 뺴고 t만큼 반복
{
}
t만큼 반복하기 위해서
그리고 앞으로 문자열을 띄어쓰기해서 받기위해선 이런식으로 접근 하여야겠다.
getline(cin, sentence); //따로 입력받기 위해서
sentence += ' '; // l am 을 입력받으면 l따로 am따로 저장되기떄문에 한줄로 다모아준다
스택에 넣고 빼서 출력하는 부분
for (int i = 0; i < sentence.size(); i++)
{
if (sentence[i] == ' ') //만약에 인덱스 중 띄어쓰기가 있고
{
while (!st.empty()) //스택이 비었으면 반복
{
cout << st.top(); //제일 위에있는걸 출력하고
st.pop(); //삭제한다.
}cout << ' '; //그리고 띄어쓰기
}
else
st.push(sentence[i]); //만약에 인덱스중에 띄어쓰기가 없다면
//내가 적은 단어를 push
총 코드
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
int T; //테스트 케이스
string sentence; //문장 (길이 최대 1000) 단어길이: 20
stack <char> st; //단어를 뒤집기 위한 스택
cin >> T;
cin.ignore(); //버퍼 비우기
while (T--) //t -- 까지 결국 인덱스 뺴고 t만큼 반복
{
getline(cin, sentence); //따로 입력받기 위해서
sentence += ' '; // l am 을 입력받으면 l따로 am따로 저장되기떄문에 한줄로 다모아준다
for (int i = 0; i < sentence.size(); i++)
{
if (sentence[i] == ' ') //만약에 인덱스 중 띄어쓰기가 있고
{
while (!st.empty()) //스택이 비었으면 반복
{
cout << st.top(); //제일 위에있는걸 출력하고
st.pop(); //삭제한다.
}cout << ' '; //그리고 띄어쓰기
}
else
st.push(sentence[i]); //만약에 인덱스중에 띄어쓰기가 없다면
//내가 적은 단어를 push
}cout << "\n";
}
}
728x90