[c/c++] 백준 9012 (Silver 4)

은동·2023년 1월 17일
0

Baekjoon

목록 보기
6/49

🔨 문제

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

<요약>
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS(Valid PS, VPS) 이라고 부른다.
예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.

여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.


🔨 해결방법

  1. 입력 받은 문자열을 스택 이용해서 VPS판별
    -> stack 라이브러리 include 하고, 선언 방식은 vector와 같음
		stack<int> s;
  1. 입력 받은 문자열을 str이라고 한다면 for문을 이용해서 str의 문자길이만큼 str의 문자 하나하나를 비교함

  2. str[i]가 ' ( ' 문자라면 push하고, ' ) ' 문자라면 if문을 통해 그 stack이 비어있는지 확인
    -> 비어있다면 '(' 문자가 없다는 뜻이므로 false를 반환하는 식으로 VPS비교


🔨 코드

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

bool VPS(string ps) {
	stack<int> stack;

	for (int i = 0; i < ps.size(); i++) {
		if (ps[i] == '(') {
			stack.push('(');
		}
		else if (ps[i] == ')') {
			if (stack.empty()) return false;
			else stack.pop();
		}
	}
	if (stack.empty()) return true;
	else return false;
}
int main(void) {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n;
	cin >> n;
	string ps, result;

	for (int i = 0; i < n; i++) {
		cin >> ps;
		result = VPS(ps) ? "YES" : "NO";
		cout << result << "\n";
		
	}
	return 0;
}
profile
자자 선수입장~

0개의 댓글