반응형
stack이용한 구현문제였습니다.
풀이방법
3가지 경우에 단어가 stack에서 빠져나옵니다.
1. 현재 보는 문자가 '<'인 경우
2. '>'인 경우
3. '공백' 또는 마지막 문자인 경우
1.의 경우 stack에 들어있는 문자들이 tag인 경우는 없으므로 ('<'와 '>'가 번갈아 나오기 때문) 모두 뽑아 ans에 붙여줍니다.
2. '<'가 나왔는지 확인하는 flag를 두어 tag(flag = 1)라면 stack에서 '>'포함 모두 뽑아내고 다시 뒤집어주어 원래 단어가 나오게 한 다음 ans변수에 합쳐줍니다.
3. 공백이 있는지 여부를 확인하는 f를 두어 공백 제외하고 단어들을 뒤집어서 합쳐줍니다. 과중에서 공백이 나왔다면 f = 1로 만들어줍니다. 나중에 공백이 있었다면 정답에 공백을 넣어줍니다.
Code
#include <bits/stdc++.h>
using namespace std;
string s, ans;
stack <char> st;
int main(){
getline(cin,s);
int flag = 0;
for(int i = 0; i < s.size(); i++){
if(s[i] != '<') st.push(s[i]);
if(s[i] == '<') {
while(!st.empty()) ans += st.top(), st.pop();
st.push(s[i]);
flag = 1;
}
else if(s[i] == '>'){
string tmp;
while(!st.empty()) tmp += st.top(),st.pop();
if(flag) {
flag = 0;
reverse(tmp.begin(),tmp.end());
ans += tmp;
}
}
else if(s[i] == ' ' || i == s.size() - 1){
if(!flag){
int f = 0;
string tmp;
while(!st.empty()){
if(st.top()!= ' ') tmp += st.top();
else f = 1;
st.pop();
}
ans += tmp;
if(f) ans += ' ';
}
}
}
cout << ans << '\n';
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 프로그래머스(2019 KAKAO BLIND RECRUITMENT) : 길 찾기 게임 (0) | 2021.06.22 |
---|---|
(C++) - 프로그래머스(2020 KAKAO BLIND RECRUITMENT) : 자물쇠와 열쇠 (0) | 2021.06.15 |
(C++) - 백준(BOJ) 17406 : 배열 돌리기 4 (0) | 2021.05.06 |
(C++) - 백준(BOJ) 21609번 : 상어 중학교 (0) | 2021.05.05 |
(C++) - 백준(BOJ) 21608번 : 상어 초등학교 (0) | 2021.05.05 |