(백준BAEKJOOB )- 9093번 -단어 뒤집기 "c++"

2023. 3. 5. 20:37언어/c, c++

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