본문 바로가기
문제 풀이/백준(BOJ)

[C++] 백준 9012번 : 괄호

by 희조당 2021. 7. 21.
728x90

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

 

9012번: 괄호

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

www.acmicpc.net


 문제 풀이

VPS인지 확인하는 법은 간단하다. 입력받은 괄호들을 스택에 차례대로 쌓고 '( )' 쌍이 나오면 스택에서 제거하면 된다. 

그럼 스택에 '('이 등장하면 쌓아주고 ')'이 등장하면 제거하는 연산을 하면 된다.

 

 함수 func

연산을 해주는 함수, 비어있으면 "YES" 아니라면 "NO" 출력 이후 스택을 초기화해준다.

 느낀 점

분명히 맞은 것 같은데 계속 틀렸다고 나오기에 어떤 점이 문제인지 한참 고민했다... 알고 보니 스택을 초기화를 해주지 않았던 부분이 문제였다!

 코드

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

using namespace std;

int n;
stack<char> s;
string str;

void func(string str) {
	for (int i = 0; i < str.length();i++) {
		if (s.empty() || str[i] == '(') s.push(str[i]);
		else if (s.top() == '(') s.pop();
	}
	if (s.empty()) cout << "YES" << "\n";
	else cout << "NO" << "\n";
	while (!s.empty()) s.pop();
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> str;
		func(str);
	}
}

댓글