http://acmicpc.net/problem/9093
{코드}
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
int n;
string s;
stack<char> st;
cin >> n;
cin.ignore();
while (n--)
{
getline(cin, s);
s += ' ';
for (const char&c : s)
{
if (c == ' ')
{
while (!st.empty())
{
cout << st.top();
st.pop();
}
cout << ' ';
}
else
st.push(c);
}
cout << "\n";
}
}
{설명}
문제는 공백을 기준으로 각 단어를 뒤집는 문제입니다.
스택은 먼저 들어간 것이 나중에 나오는 FILO의 형식이므로 어떤 단어를 스택에 넣으면 나올 때는 반전돼서 나오는 효과가 있습니다.
이를 활용해 공백이 아니면 스택에 push하고 공백이면 스택에 들어있는 것들을 모두 출력합니다.
공백이 들어올때 스택에 들어있는 것은 마지막으로 들어온 공백과 현재 공백 사이의 문자열이므로 단어와 다름이 없습니다.
cin.ignore는 입력 버퍼를 지우는 함수로 없이 사용하면 n을 입력할 때 친 엔터(\n)가 버퍼에 남아있어 첫 번째로 입력받는 문자열의 시작이 엔터가 됩니다.
*std::getline 함수는 엔터(\n)를 버리기 때문에 따로 버퍼를 지울 필요가 없습니다.
{코드}
for _ in range(int(input())):
print(*map(lambda x: x[::-1], input().split()))
{설명}
파이썬에서는 입력받은 문자열을 split을 통해 공백을 기준으로 나누면 각 인덱스에 단어를 담게 되며, 각 단어별로 [::-1]을 통해 반전시킨 것을 출력하면 된다.
* 애스터리스크(*)를 이터러블 앞에 붙이면 이터러블 안의 값들을 차례대로 반환한다고 생각하면 된다. 그래서 출력하면 공백을 사이에 두고 출력된다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 17608번-C++] 막대기 (0) | 2021.05.04 |
---|---|
[백준 9012번-C++] 괄호 (0) | 2021.04.07 |
[백준 10828번 - C++] 스택 (0) | 2021.03.20 |
[백준 19940번-파이썬/Python] 피자 오븐 (0) | 2021.02.14 |
[백준 19939번-파이썬/Python] 박 터뜨리기 (0) | 2021.02.13 |