-
[백준/BOJ] 4949번 균형잡힌 세상 (C++)알고리즘 문제풀이/백준 2021. 1. 8. 00:41
스택을 이용하는 문제
닫힌 괄호 ')' 혹은 ']'를 만났을 때, 스택이 비어있거나 스택의 top이 짝이 아니라면 무조건 답이 될 수 없으므로 flag 변수를 false로 바꾸고 break 해줘야 합니다. 또한 모든 탐색이 끝나고, 스택에 원소가 남아있으면 이것 역시 답이 될 수 없으므로 flag를 flase로 바꿔주는 것을 주의해야합니다.
#include <iostream> #include <stack> using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); while(1) { string str; stack<char> s; getline(cin, str); if(str == ".") break; bool flag = true; for(int i = 0; i < str.size(); i++) { if(str[i] == '(' || str[i] == '[') s.push(str[i]); else if(str[i] == ')') { if(s.empty() || s.top() != '(') { flag = false; break; } s.pop(); } else if(str[i] == ']') { if(s.empty() || s.top() != '[') { flag = false; break; } s.pop(); } } if(!s.empty()) flag = false; if(flag) cout << "yes\n"; else cout << "no\n"; } }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 1406번 에디터 (C++) (0) 2021.01.08 [백준/BOJ] 2164번 카드2 (C++) (0) 2021.01.08 [백준/BOJ] 10773번 제로 (C++) (0) 2021.01.07 [백준/BOJ] 3273번 두 수의 합 (C++) (0) 2021.01.07 [백준/BOJ] 14225번 부분수열의 합 (C++) (0) 2021.01.05