🚀 들어가며...
- 스택을 사용하여 문제를 풀이하였다.
- 모든 문자열을 뒤집는다. ("<", ">" 사이에 존재하는 문자열은 제외)
- stack : 뒤집을 문자가 들어갈 공간
- ans : 결과 문자열
🔗 문제
https://www.acmicpc.net/problem/17413
17413번: 단어 뒤집기 2
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져
www.acmicpc.net
💌 소스코드
#include <iostream>
#include <stack>
#include <string>
using namespace std;
// 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져 있다.
// 문자열의 시작과 끝은 공백이 아니다.
// '<'와 '>'가 문자열에 있는 경우 번갈아가면서 등장하며, '<'이 먼저 등장한다. 또, 두 문자의 개수는 같다.
int main(void){
stack<char> stack; // 뒤집힐 문자열이 들어가는 스택
string str;
string ans;
bool isOpen = false;
getline(cin,str); // 문자 한 줄 입력
for(int i=0; i<str.size(); i++){
char ch = str[i];
// "<"
if(ch == '<'){
isOpen = true;
while(!stack.empty()){
ans += stack.top();
stack.pop();
}
ans += "<";
}
// ">"
else if(ch == '>'){
isOpen = false;
while(!stack.empty()){
ans += stack.top();
stack.pop();
}
ans += ">";
}
// " "
else if(ch == ' '){
while(!stack.empty()){
ans += stack.top();
stack.pop();
}
ans += " ";
}
// 일반 문자의 경우
// "< >" 안에 있는 경우 뒤집지 않는다.
// 괄호 밖에 있는 경우 뒤집는다.
else{
if(!isOpen)
stack.push(str[i]);
else
ans += str[i];
}
}
while(!stack.empty()){
ans += stack.top();
stack.pop();
}
cout << ans << endl;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 17299] 오등큰수 (cpp, stack, array) (0) | 2021.12.19 |
---|---|
[백준 10799] 쇠막대기 (cpp, stack) (0) | 2021.12.19 |
[백준 1158] 요세푸스 문제 (cpp, queue) (0) | 2021.12.19 |
[백준 10845] 큐 (cpp, vector) (0) | 2021.12.19 |
댓글