문제
https://www.acmicpc.net/problem/9012
9012번: 괄호
문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(conc
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;
}
포인트는 '('만 스택에 저장한다는 점!! 나머지는 주석에 써놨어요
결과화면
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[C++][프로그래머스][스택/큐] 기능개발 :: seoftware (0) | 2020.02.26 |
---|---|
[C++][프로그래머스][스택/큐] 탑 :: seoftware (0) | 2020.02.26 |
[C++][백준 10828][스택] 스택 :: seoftware (0) | 2020.02.21 |
[C++][백준 2178][BFS DFS] 미로 탐색 - BFS :: seoftware (0) | 2020.02.20 |
[C++][백준 2579][다이나믹 프로그래밍] 계단 오르기 :: seoftware (0) | 2020.02.20 |
댓글