문제 링크
풀이
스택을 이용하여 풀이할 수 있다.
문자열을 처음부터 읽으면서 아무것도 만나지 않았을 때는 stack에 담다가 <을 만나거나 공백을 만나면 stack의 모든 문자열을 pop 하면 된다. 그리고 만약 <을 만났다면 >를 만날 때까지 그냥 출력한다.
코드
#include <cstdio>
#include <stack>
#include <cstring>
using namespace std;
char s[100005];
stack<char> st;
int main() {
scanf("%[^\n]", s);
int sz = strlen(s);
bool flag = false;
for (int i = 0; i < sz; i++) {
if (s[i] == '<') {
while (!st.empty()) {
printf("%c", st.top());
st.pop();
}
printf("<");
flag = true;
}
else if (s[i] == '>') {
printf(">");
flag = false;
}
else if (flag) printf("%c", s[i]);
else if (s[i] == ' ') {
while (!st.empty()) {
printf("%c", st.top());
st.pop();
}
printf(" ");
}
else st.push(s[i]);
}
while (!st.empty()) {
printf("%c", st.top());
st.pop();
}
}
'Algorithm > BOJ' 카테고리의 다른 글
백준[1657] 두부장수 장홍준 (0) | 2021.09.10 |
---|---|
백준[1648] 격자판 채우기 (0) | 2021.09.10 |
백준 [2494] 숫자 맞추기 (0) | 2021.09.05 |
백준[13392] 방법을 출력하지 않는 숫자 맞추기 (0) | 2021.09.03 |
백준[1509] 팰린드롬 분할 (0) | 2021.09.02 |