[C++] 백준 9012: 괄호

Cyan·2024년 1월 27일
0

코딩 테스트

목록 보기
34/166

백준 9012: 괄호

문제 요약

입력으로 주어진 괄호 문자열이 유효한 괄호인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.

문제 분류

  • 자료 구조
  • 문자열
  • 스택

문제 풀이

문자열의 첫 문자부터 순회하면서 '('문자는 스택에 쌓고, ')'을 만날때마다 빼내면 된다.

만약 순회하는 중에 스택이 비어있으면서 ')'을 만나거나, 전부 순회했더라도 스택이 비어있지 않다면 올바른 괄호가 아니다.

풀이 코드

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <stack>

using namespace std;

int main()
{
	stack<char> s;
	string in;
	int t;
	bool d = true;

	cin >> t;

	while (t--) {
		d = true;
		cin >> in;
		for (int i = 0; i < in.length(); i++) {
			if (in[i] == '(') s.push('(');
			else if (in[i] == ')') {
				if (!s.empty()) s.pop();
				else {
					d = false;
					break;
				}
			}
		}
		if (s.empty()) {
			if (d) cout << "YES\n";
			else cout << "NO\n";
		}
		else cout << "NO\n";
		while (!s.empty()) s.pop();
	}
	return 0;
}

0개의 댓글