문제 링크: 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();
}