[백준] 자료구조 12605번: 단어순서 뒤집기

C.K. ·2022년 6월 17일
0

baekjoon

목록 보기
20/67

문제

스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만 이루어져 있다. 단어 사이에는 하나의 스페이스만 들어간다.

입력

첫 행은 N이며, 전체 케이스의 개수이다.

N개의 케이스들이 이어지는데, 각 케이스는 스페이스로 띄어진 단어들이다. 스페이스는 라인의 처음과 끝에는 나타나지 않는다. N과 L은 다음 범위를 가진다.

  • N = 5
  • 1 ≤ L ≤ 25

출력

각 케이스에 대해서, 케이스 번호가 x일때 "Case #x: " 를 출력한 후 그 후에 이어서 단어들을 반대 순서로 출력한다.

Approach

  • 스택으로 구현하면 간단한 문제! 각 문장을 입력받고 문장을 stringstream으로 변환 후 each 단어를 스택에 넣는다. 스택을 이용하면 단어 순서를 뒤집는 게 가능하다. 스택이 empty할때까지 단어를 빼내서 출력한다. 이 과정을 주어진 T만큼 반복

Source Code

#include <iostream>
#include <sstream>
#include <stack>
#include <vector>
#include <string>
using namespace std;

int main() {
    
    ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    // 테스트 케이스의 갯수 T를 입력받기 
    int T;
    cin >> T;
    cin.ignore(); // 버퍼 지우기 
    
    // 테스트 케이스 T번 동안 
    for (int i = 0; i < T; i++)
    {
        string sentence;
        getline(cin, sentence); // 문장 입력받기 
        stringstream ss;
        ss << sentence; // stringstream으로 변환
        
        string word;
        stack<string> s;
        while (ss >> word) // 각 단어를 스택에 넣기 
        {
            s.push(word);
        }
        
        cout << "Case #" << i + 1 << ": ";
        while (!s.empty()) // 스택에서 단어 빼내서 출력
        {
            cout << s.top() << ' ';
            s.pop();
        }
        
        cout << '\n'; // 다음 줄에 출력 
        
    }
    
    return 0;
}
profile
1일 1알고리즘

0개의 댓글