https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
문자열 파싱 비슷한 문제이다.
스택을 사용해서 괄호를 넣었다가 빼는 동작으로 최종적으로 스택이 비어있지 않으면, 괄호가 짝이 안맞는다는 말이므로 NO를 출력하면 된다.
다음과 같은 규칙으로 구현했다.
1. '(' 이면 스택에 넣는다.
2. ')' 이면 스택에 '(' 이 있는지 확인한다.
a. 스택이 비었다. -> push()한다.
b. 스택 탑이 ')' 이다 -> push() 한다.
c. 스택 탑이 '(' 이다 -> pop()한다.
정답을 answer 벡터에 넣었다가 한꺼번에 출력한다.
#include <iostream>
#include <string>
#include <stack>
#include <vector>
using namespace std;
int main(void) {
int n;
vector<string> answer;
cin >> n;
for (int i = 0; i < n; i++) {
string str;
stack<char> s;
cin >> str;
for (int i = 0; i < str.length(); i++) {
if (str[i] == '(') {
s.push('(');
}
if (str[i] == ')') {
if (s.empty() || s.top() == ')') {
s.push(')');
}
else {
s.pop();
}
}
}
if (s.empty()) {
answer.push_back("YES");
}
else {
answer.push_back("NO");
}
}
for (int i = 0; i < answer.size(); i++) {
cout << answer[i] << endl;
}
}
'컴퓨터기본 > 문제풀이' 카테고리의 다른 글
[백준] 11729. 하노이 탑 이동 순서 (0) | 2021.08.21 |
---|---|
[백준] 4949번: 균형잡힌 세상 (0) | 2021.08.08 |
[백준] 1152번: 단어의 개수 (0) | 2021.06.30 |
[백준] 1157: 단어 공부 (0) | 2021.06.27 |
[백준] 2675번: 문자열 반복 (0) | 2021.06.27 |