-
Mismatched Brackets알고리즘 풀이/알고리즘 해결전략 연습 2019. 7. 10. 10:42
문제: https://algospot.com/judge/problem/read/BRACKETS2
주의할점:
스택이 비어있는 경우와, 마지막에 스택에 남아있는 열린 괄호가 있는지 확인하자
코드 (C ++ ) 종만북 참조
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int C;
bool wellMatched(const string& sentence)
{
stack<char> st;
const string opening("({["), closing(")}]"); // ({[ 와 )}]의 순서를 맞춰준다. find로 인덱스를 맞추어가며 비교하기 때문
for (int i = 0; i < sentence.size(); ++i)
if (opening.find(sentence[i]) != -1) // 0,1,2중 하나가 나왔다면
st.push(sentence[i]); // 스택에 넣어준다.
else
{
if (st.empty()) return false; // 스택이 비어있는 경우는 실패
if(opening.find(st.top()) != closing.find(sentence[i])) // 스택에 마지막에넣어줬던 인덱스와 비교하여 동일하지 않다면 실패
return false;
st.pop(); // 짝을 맞췄으니 스택에서 뺀다.
}
return st.empty();
}
int main()
{
cin >> C;
while (C--)
{
string sentence;
cin >> sentence;
if (wellMatched(sentence)) {
cout << "YES " << endl;
}
else
cout << "NO" << endl;
}
return 0;
}
'알고리즘 풀이 > 알고리즘 해결전략 연습' 카테고리의 다른 글
숫자 게임 (0) 2019.07.17 드래곤 커브 (0) 2019.07.14 여행 짐 싸기 (0) 2019.07.10 비대칭 타일링 (0) 2019.07.07 삼각형 위의 최대 경로 수 세기 (0) 2019.07.07