[C++]백준9012번 괄호

less than 1 minute read

오늘은 백준9012번 괄호 문제를 풀어보도록 하자.

스택에 관련된 가장 기본적인 문제이다. 예전 기업 코딩테스트를 봤을 때 위 문제가 나와서 손쉽게 푼 기억이 있다.

문제는 다음과 같다.

                               [접근법]

  1. '(' 가 나오면 스택에 1 푸쉬, ')' 가 나오면 하나 팝을 한다.
  
  2. 만일 스택의 사이즈가 0인데 ')'가 나오면 return "NO", 연산을 다 끝냈는데 사이즈가 0이면 return "YES", 아니면 "NO"

  3. 그 후 스택 초기화하고 계속 반복하면 끝 :)
                                     [코드]
#include <iostream>
#include <string>
#include <stack>
using namespace std;

int T;
string txt;
stack<int>s;

string f(string txt) {
	for (int i = 0; i < txt.length(); i++) {
		if (txt[i] == '(') {
			s.push(1);
		}
		else {
			if (s.size() <= 0) {
				return "NO";
			}
			else {
				s.pop();
			}
		}
	}
	if (s.size() == 0) {
		return "YES";
	}
	else {
		return "NO";
	}
}

int main() {
	cin >> T;

	while (T--) {
		cin >> txt;
		cout << f(txt) << '\n';
		while (s.size()>=1) {
			s.pop();
		}
	}
}