문제 설명
https://www.acmicpc.net/problem/9012
주어진 괄호 문자열이 한 쌍의 괄호 기호로 된 "()"인지 아닌지 구하기
문제 풀이법
stack을 사용하면 된다
올바른 한쌍의 괄호기호인지 구별하기 위해 flag 사용
- '('가 들어왔을 때 : stack에 push
- ')'가 들어왔을 때
- 만약 stack이 비어있다면? : flag를 false로 변경
- 만약 stack이 비어있지 않고, stack의 top이 '('이면 pop
- 만약 stack이 비어있지 않고, stack의 top이 '('가 아니면 flag를 false로 변경
이후 stack이 비어있지 않다면 flag를 false로 변경
- flag가 false이면 NO 출력
- flag가 true이면 YES 출력
소스 코드
#include <iostream>
#include <stack>
using namespace std;
int main()
{
int n;
cin >> n;
while (n > 0)
{
string str;
stack<char> s;
cin >> str;
bool flag = true;
for (int i = 0; i < str.size(); i++)
{
if (str[i] == '(')
s.push('(');
else if (str[i] == ')')
{
if (s.empty())
{
flag = false;
break;
}
else
{
if (s.top() == '(')
s.pop();
else
s.push(')');
}
}
}
if (!s.empty())
flag = false;
if (flag == false)
printf("NO\n");
else
printf("YES\n");
n--;
}
return 0;
}
'Algorithm Study' 카테고리의 다른 글
[백준] 10799 쇠막대기 (0) | 2023.03.01 |
---|---|
[프로그래머스] 1단계 - 푸드 파이트 대회 (0) | 2023.02.05 |
[백준] 3986 좋은 단어 (0) | 2023.01.19 |
[백준] 4949 균형잡힌 세상 (0) | 2023.01.19 |
[백준] 5430 AC (0) | 2023.01.18 |