본문 바로가기
Algorithm

[백준 알고리즘] C++ | 0912번 괄호 더하기

by Baest 2022. 7. 6.

 

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

 

9012번: 괄호

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

www.acmicpc.net

 

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

int main(void) {
	int k;
	cin >> k;

	while (k > 0) {
		k--;
		string input;
		cin >> input;

		stack<char> st;
		string answer = "YES";
		for (int i = 0; i < input.length(); i++) {
			//'('는 스택에 저장
			if (input[i] == '(') {
				st.push(input[i]);
			}
			//')'가 나오면 스택에 저장된 '('와 짝이 맞는지 확인하고 pop
			else if (!st.empty() && input[i] == ')' && st.top() == '(') {
				st.pop();
			}
			//위의 경우를 제외하고는 모두 vps가 아닌 상황이므로 종료(break)
			else {
				answer = "NO";
				break;
			}
		}
		//'('와 ')'가 짝이 안 맞는 경우 '('가 모두 pop되지 않기 때문에
		// 스택이 비지 않는다. 따라서 이 경우는 vps가 아니므로 "NO"
		if (!st.empty()) answer = "NO";

		cout << answer << endl;
	}
	return 0;
}

 

 

참고: 이전에 python으로 제출했던 풀이

num = int(input())

for i in range(num):
    
    data = input()
    arr = list(data)
    sum = 0

    for i in arr:
        if i == "(":
            sum += 1
        elif i == ')':
            sum -= 1
        if sum < 0:
            print("NO")
            break
    if sum > 0:
        print("NO")
    elif sum == 0:
        print("YES")