스택을 이용한 기본 문제였다. 
항상 top()을 접근하기 전에 스택이 empty() 인지를 확인해야 한다! (이걸 자주 빠뜨렸었다. )
( 이면 푸시한다. 
) 가 나오면, 현재 스택이 비어있지 않은지 확인하고, top() 이 ( 인지 확인한다. 
( 과 )는 짝이 맞는 괄호이기 때문에, 현재 top() 인 (를 팝 한다. 
오늘은 한 번에 맞았다. 
 
 
/** 괄호
 https://www.acmicpc.net/problem/9012
 http://boj.kr/ac1a8f71cfbe4c62abbc1aa710778283
 */
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

int t;
string input;

bool check(string s){
  stack<char> st;
  for(auto i : s){
    if(i == '(') st.push('(');
    else if(!st.empty() && st.top() == '('){
      st.pop();
    }else return false;
  }

  if(st.empty()) return true;
  else return false;
}
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> t;

  while(t--){
    cin >> input;
    if(check(input)) cout << "YES" << endl;
    else cout << "NO" << endl;
  }

  return 0;
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

카드 백준 11652번 c++  (0) 2022.02.13
쇠막대기 백준 10799번 c++  (0) 2022.02.13
좋은 단어 백준 3986번 c++ (두번째 풀기)  (0) 2022.02.11
Hasing 백준 15829번 c++  (0) 2022.02.11
시리얼 번호 백준 1431번 c++  (0) 2022.02.10

+ Recent posts