https://www.acmicpc.net/problem/4949
[이 왔다면 무조건 ]가 그 다음에 와야하고
(이 왔다면 무조건 )이 그 다음에 와야한다. 그 사이에 다른 기호가 와버리면 에러가 난다.
우선 이 원칙에 따라서 생각한게 스택이었다.
말 그대로 (이나 [이 온 게 먼저 쌓여있어야하고 그 이후에 온걸 확인하고 빼야하기때문이다.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
while (true)
{
string input;
getline(cin, input);
std::stack<char> s;
bool flag = true;
if (input.length() == 1 && input[0] == '.')
break;
for (int i = 0; i < input.length(); i++)
{
if (input[i] == '[' || input[i] == '(')
s.push(input[i]);
if (input[i] == ']')
{
if (s.empty() || s.top() == '(')
flag = false;
else
s.pop();
}
if (input[i] == ')')
{
if (s.empty() || s.top() == '[')
flag = false;
else
s.pop();
}
}
if (s.empty() && flag)
cout << "yes" << '\n';
else
cout << "no" << '\n';
}
return 0;
}
문자열이 여러개 일 수 있기 때문에 getline함수를 사용했다.
bool 타입의 flag 변수 활용은 너무나 자주 쓰이니까 잘 기억해놓자.
나는 보통 반복문에서 break하기 애매할 때 조건문으로 쓰는 것 같다
'백준 문제풀이 > 실버4' 카테고리의 다른 글
백준 1812번 - 사탕 (0) | 2022.03.17 |
---|---|
백준 1543번 - 문서 검색 (0) | 2022.03.17 |
백준 10828번 - 스택 (0) | 2022.01.13 |
백준 2164번 - 카드2 (0) | 2022.01.12 |
백준 1049번 - 기타줄 (0) | 2021.12.17 |