문제 링크: https://algospot.com/judge/problem/read/BRACKETS2
괄호 짝을 맞추는 문제입니다. 스택을 쓰면 되는데요, 이 문제는 괄호 종류가 여러개이기 때문에 그 점을 유의하셔야 합니다.
종만북에 있는 코드입니다. 코드가 너무 깔끔하네요..
bool wellMatched(const string& formula) {
// 여는 괄호 문자와 닫는 괄호 문자들
const string opening("({["), closing(")}]");
// 이미 열린 괄호들을 순서대로 담는 스택
stack<char> openStack;
for (int i = 0; i < formula.size(); ++i) {
// 여는 괄호인지 닫는 괄호인지
if (opening.find(formula[i]) != -1)
openStack.push(formula[i]);
else {
// 여는 괄호가 없음
if (openStack.empty())
return false;
// 짝이 맞지 않는 괄호
if (opening.find(openStack.top()) != closing.find(formula[i]))
return false;
openStack.pop();
}
}
// 닫히지 않은 괄호가 없어야 성공
return openStack.empty();
}
반응형
'Online Judge > 알고스팟' 카테고리의 다른 글
[알고스팟][C++] WORDCHAIN: 단어 제한 끝말잇기 (0) | 2020.05.17 |
---|---|
[알고스팟][C++] DICTIONARY: 고대어 사전 (0) | 2020.05.13 |
[알고스팟][C++] TRAVERSAL: 트리 순회 순서 변경 (0) | 2020.04.30 |
[알고스팟][C++] ITES: 외계 신호 분석 (0) | 2020.04.27 |
[알고스팟][C++] SNAIL: 달팽이 (0) | 2020.03.29 |