-
[백준 17413] 단어 뒤집기 2알고리즘/백준 2021. 12. 19. 16:30
🚀 들어가며...
- 스택을 사용하여 문제를 풀이하였다.
- 모든 문자열을 뒤집는다. ("<", ">" 사이에 존재하는 문자열은 제외)
- stack : 뒤집을 문자가 들어갈 공간
- ans : 결과 문자열
🔗 문제
https://www.acmicpc.net/problem/17413
💌 소스코드
#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