728x90
Silver4
문제집 링크
https://www.acmicpc.net/workbook/view/3953
문제 링크
https://www.acmicpc.net/problem/9012
문제 해결 과정
한줄의 문자열을 입력받고, 문자 하나 하나를 검사해가며,
괄호의 첫부분, '(' 라면 스택에 적립, 끝부분 ')' 이라면, 스택에서 pop한다!
모든 문자를 점검했을때, 스택이 비어있다면, 성공 아니면 실패를 출력한다.
주의할 점
1.스택이 비어있는데 ')' 가 나온다면, 오류가 나므로, 이 경우를 잘 검사해야 한다.
코드
#include <iostream>
#include <stack>
using namespace std;
int main()
{
int repeat;
cin >> repeat;
for (int i = 0; i < repeat; i++)
{
stack<char> BOJstack;
/*
괄호의 진행 상황을 저장할 스택을 선언!
이 스택은 단지 스택의 역할만 하면 되기 때문에,
가장 크기가 적은 char형으로 선언해주었다.
*/
string cmd;
cin >> cmd;
for (int j = 0; j < cmd.length(); j++)
{
if (cmd[j] == '(')//만약 괄호의 시작 부분이라면 스택에 적립
BOJstack.push('(');
else {//만일 괄호의 끝 부분이라면
if (BOJstack.empty()) {//큐가 비어있는데, 끝부분이라면 반드시,NO!
BOJstack.push(')');//반복문 후에 스택에 남아있어야 NO를 출력할 수 있따.
break;//반복문 바로 탈출
}
else//괄호가 한 쌍 이니까 pop!
BOJstack.pop();
}
}
if (BOJstack.empty())//스택이 비어있어야 통과!
cout << "YES" << endl;
else
cout<<"NO"<<endl;
}
}
잘못된 부분이나 오해할 수 있는 부분이 있다면 언제든지
댓글 남겨주시기 바랍니다!
728x90
'알고리즘 풀이 > 백준,BOJ [코드플러스]' 카테고리의 다른 글
[백준/자료구조 1/C++] 1874 - 스택 수열 (0) | 2021.09.27 |
---|---|
[백준/자료구조 1/C++] 1406-에디터 (0) | 2021.09.14 |
[백준/자료구조 1/C++] 10828-스택 (0) | 2021.09.02 |
[백준/자료구조 1/C++] 9093-단어 뒤집기 (0) | 2021.09.02 |