_dudu 2023. 5. 5. 20:15

 

풀이

주어진 문자열의 괄호쌍이 맞는지확인하는 문제이다.

  • 변수 t를 입력받는다. t는 이후에 입력될 문자열의 개수를 나타낸다.
  • bool isValid = true;를 통해 문자열의 괄호 짝이 맞는지를 저장하는 변수를 초기화합니다.
  • str[i]가 '('인 경우, 스택에 '('를 push한다.
  • str[i]가 ')'인 경우, 스택이 비어있거나 top이 '('가 아닌 경우, isValid를 false로 변경하고 break한다.
  • 그렇지 않은 경우, 스택에서 '('를 pop한다.
  • for문이 끝난 후, 스택이 비어있지 않은 경우, isValid를 false로 변경한다.
  • isValid가 true인 경우, "YES"를 출력하고 그렇지 않은 경우, "NO"를 출력한다.

 

 

코드

#include <iostream>
#include <stack>
#include <string>
using namespace std;

int main() {
	int t;
	cin >> t;
	
	while(t--) {
		string str;
		stack<char> stack;
		bool isValid = true;

		cin >> str;

		for (int i = 0; i < str.size(); i++) {
			if (str[i] == '(') {
				stack.push(str[i]);
			}
			else if (str[i] == ')') {
				if (stack.empty() || stack.top() != '(') {
					isValid = false;
					break;
				}
				else
					stack.pop();
			}
		}


		if (!stack.empty())
			isValid = false;
		if (isValid)
			cout << "YES" << '\n';
		else
			cout << "NO" << '\n';
	}

	return 0;
}

 

 

 

 

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

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

www.acmicpc.net