Computer Science/C++

백준 C++ | #15 BOJ9012 괄호 C++ 문제 풀이

토마토. 2022. 8. 15. 20:47

9012번: 괄호 (acmicpc.net)

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

c++의 stack STL을 이용해서 푸는 문제였다. 

입력 문자열을 받은 뒤에, 문자열을 하나씩 순회하면서 스택을 이용해서 괄호 열기(와 괄호 닫기)의 짝을 맞추었다.

 

문자가 (라면 스택에 Push하고

문자가 )이면 스택에서 Pop해준다. 

만약 스택에서 Pop할 것이 없다면(스택이 비어있다면), 이번 괄호는 NO인 것이다. 

문자열을 모두 처리한 순간에 스택이 비어있다면(모두 짝이 맞았다면) YES를, 아니라면 NO를 출력해준다. 

 

#include <iostream>
#include <string>
#include <vector>
#include <stack>


int main() {
	int size;
	std::cin >> size;

	std::vector<std::string> v;

	for (int i = 0; i < size; i++) {
		std::stack<std::string> st;
		bool done=false;
		std::string tmp;
		std::cin >> tmp;

		for (int i = 0; i < tmp.size(); i++) {
			if (tmp[i] == '(') {
				st.push("(");
			}
			else {
				if (st.size() == 0) {
					v.push_back("NO");
					done = true;
					break;
				}
				else {
					st.pop();
				}
			}
		}

		if (done) {
			continue;
		}
		else {
			if (st.size() == 0) {
				v.push_back("YES");
			}
			else {
				v.push_back("NO");
			}
		}
	
	}
	std::vector<std::string>::iterator iter;
	for (iter = v.begin(); iter != v.end(); iter++) {
		std::cout << *iter << std::endl;
	}
	return 0;
}