출처: https://www.acmicpc.net/problem/9012
풀이
저번에풀었던 10828번 문제 (https://jow1025.tistory.com/16)와 마찬가지로 스택을 이용한 괄호검사 문제로써 스택의 개념을 공부한 후 복습하기에 좋은 문제인 것같습니다. 이번문제는 c++의 스택stl을 이용하여 풀었습니다.
주의할점은 테스트케이스n을 입력후에 개행을 처리해주지않으면 n만입력해도 yes가출력됩니다.
cin.ignore()로 해결하였고, 스택에 넣다가 입력할 문자가 오른괄호일 때 스택이 비어있지않고 스택의 최상단에 위치한 문자가 왼괄호 일때만 처리해주고 스택이 비어있을 시 즉시 빠져나와 NO를 출력하게합니다.
코드
#include<iostream> #include<stack> #include<string> using namespace std; int main() { string s; int n; cin >> n; cin.ignore(); while(n--) { stack<char>st; getline(cin, s); bool flag = true; if (s[0] == '.' && s.length() == 1) break; for (int i = 0; i < s.length(); i++) { if (s[i] == '(') st.push('('); else if (s[i] == '[') st.push('['); else if (s[i] == ']') { if (st.empty() == 0 && st.top() == '[') st.pop(); else { flag = false; break; } } else if (s[i] == ')') { if (st.empty() == 0 && st.top() == '(') st.pop(); else { flag = false; break; } } } if (flag == true && st.empty()) cout << "YES" << '\n'; else cout << "NO" << '\n'; } }
결과
'문제풀이(BOJ) > 스택' 카테고리의 다른 글
[백준 11899] 괄호 끼워넣기 (0) | 2020.01.08 |
---|---|
[백준 3986] 좋은 단어 (0) | 2019.12.08 |
[백준 10828] 스택 (0) | 2019.12.03 |