문제: 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")
'Algorithm' 카테고리의 다른 글
[프로그래머스] JavaScript | 올바른 괄호 (스택) (0) | 2022.08.17 |
---|---|
[프로그래머스] JavaScript | 숫자 문자열과 영단어 (0) | 2022.08.15 |
[백준 알고리즘] C++ | 2669번 직사각형 네개의 합집합의 면적 구하기 (0) | 2022.06.15 |
[백준] 2231번: 분해합(브루트포스) - Python (0) | 2022.03.07 |
[백준] 2798번: 블랙잭(브루트포스) - Python (0) | 2022.03.07 |