https://www.acmicpc.net/problem/9012
문자열 파싱 비슷한 문제이다.
스택을 사용해서 괄호를 넣었다가 빼는 동작으로 최종적으로 스택이 비어있지 않으면, 괄호가 짝이 안맞는다는 말이므로 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 |