https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
스택 문제이다.
괄호가 완전히 닫혀있는 꼴이면 YES, 아니면 NO를 출력하는 문제이다.
굉장히 쉽게 풀었는데 배열 길이를 50으로 해서 틀렸었다.
무조건 배열 길이는 지정한 것보다 1 크게 하자는 교훈을 얻었다.
'('이 입력되면 push, ')'이 입력되면 pop을 해주는데 이 때 stack이 비어있는 상태에서 pop을 시도하면 VPS가 아니므로 NO를 출력해주었다.
for문을 다 돌고 나면 stack에는 아무것도 없어야하기 때문에 이 조건도 넣어주었다.
#include <iostream>
#include <stack>
#include <string.h>
using namespace std;
int T;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> T;
for (int i = 0; i < T; i++)
{
// 배열 50으로 하면 에러
char input[51]; cin >> input;
bool isWrong = false; stack<int> mystack;
for (int j = 0; j < strlen(input); j++) {
if (input[j] == '(') {
// 열리는 괄호
mystack.push(1);
}
else {
// 닫히는 괄호
if (mystack.empty()) {
// 이미 비어있다면 짝이 안맞는 것임
cout << "NO\n";
isWrong = true;
break;
}
else {
// 아직 안비어있다면
mystack.pop();
}
}
}
if (!isWrong) {
// for문을 다 지나간 경우
if (!mystack.empty()) {
// 다 비워져있어야 하는데 아니라면
cout << "NO\n";
}
else {
cout << "YES\n";
}
}
}
}
'백준' 카테고리의 다른 글
[11866] 요세푸스 문제 0 (0) | 2023.01.26 |
---|---|
[1874] 스택 수열 (0) | 2023.01.19 |
[10986] 나머지 합 (0) | 2023.01.16 |
[16139] 인간-컴퓨터 상호작용 (0) | 2023.01.12 |
[25682] 체스판 다시 칠하기 2 (0) | 2023.01.11 |
댓글