문제
문제에 대한 링크는 여기를 클릭해주세요.
문제 설명
백준 9012 : 괄호와 유사한 문제입니다. 이전 문제와 다른 점은 대괄호가 추가되었다는 것입니다.
풀이
공백을 포함하여 문자를 입력받아야하기 때문에 getline함수를 이용하였습니다. 이전 문제와 똑같은 원리로 비어있음을 판단하여 괄호가 짝이 맞았는지 안맞았는지를 판단하였습니다.
소스 코드
#include <iostream>
#include <string>
#include <stack>
using namespace std;
bool check(const string &str);
int main()
{
string str;
while (1)
{
getline(cin, str);
if(str[0] == '.')
break;
if(check(str))
cout << "yes" << endl;
else
cout << "no" << endl;
}
return 0;
}
bool check(const string &str)
{
stack<char> s;
int len = str.length();
for (int i = 0; i < len; i++)
{
if(str[i] == '(' || str[i] == '[')
s.push(str[i]);
else if(str[i] == ')')
{
if(s.empty() || s.top() != '(')
return false;
if(s.top() == '(')
s.pop();
}
else if(str[i] == ']')
{
if(s.empty() || s.top() != '[')
return false;
if(s.top() == '[')
s.pop();
}
}
return s.empty();
}
주의 사항
"(])"같은 케이스를 고려하여 top이 열린 괄호가 아니라는 조건이 추가되어야 합니다.
'알고리즘 Algorithm > 백준 (BaekJoon)' 카테고리의 다른 글
백준 17298 : 오큰수 [C++] (0) | 2021.02.13 |
---|---|
백준 1874 : 스택 수열 [C++] (0) | 2021.02.12 |
백준 9012 : 괄호 [C++] (0) | 2021.02.11 |
백준 10773 : 제로 [C++] (0) | 2021.02.11 |
백준 10828 : 스택 [C++] (0) | 2021.02.11 |