코딩테스트/백준
[백준] 9012번 괄호 (C++)
Deff_a
2024. 3. 1. 13:32
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
문제

이 문제는 입력한 문자열에서 모든 괄호가 완성되면 "YES"를, 완성되지 못한다면 "NO"를 출력하는 문제이다.
스택의 top에 "("가 있고 푸시할 문자가 ")"일 때 pop을 하고, 그 이외의 경우에는 push한 뒤,
스택이 비어 있다면 "YES", 스택이 채워져 있다면 "NO"를 출력하는 방법으로 문제를 풀이했다.
풀이
#include <iostream>
#include<stack>
#include<string>
using namespace std;
int main() {
int num;
cin >> num;
while (num > 0) {
string vps;
cin >> vps;
stack<char> vpsStack;
for (int i = 0; i < vps.length(); i++) {
if (vpsStack.empty()) { // 문자열이 비어 있을때 괄호 Push
vpsStack.push(vps[i]);
}
else {
if (vpsStack.top() < vps[i]) { // '('은 ')'보다 작기 때문에 해당 조건문으로 () 짝 판별, 스택에 맞는 괄호가 나온다면 top에 있는 '('팝
vpsStack.pop();
}
else { // 짝이 맞지 않다면 Push
vpsStack.push(vps[i]);
}
}
}
if (vpsStack.empty()) { // 스택이 비어있다면 Yes
cout << "YES\n";
}
else {
cout << "NO\n"; // 스택에 뭔가가 남아있다면 No
}
num--;
}
return 0;
}
출력 결과를 Yes, No로 잘못 써서 몇시간 동안 고민하던 문제였다.
앞으로는 출력 문자를 제대로 확인해 문제를 풀어야겠다.