더듬이의 헬로월드

Hello, World!

알고리즘 풀이/백준,BOJ [코드플러스]

[백준/자료구조 1/C++] 9012-괄호

더듬이 2021. 9. 4. 15:30
728x90

Silver4


문제집 링크

https://www.acmicpc.net/workbook/view/3953

문제 링크

https://www.acmicpc.net/problem/9012


문제 해결 과정

한줄의 문자열을 입력받고, 문자 하나 하나를 검사해가며,

괄호의 첫부분, '(' 라면 스택에 적립, 끝부분 ')' 이라면, 스택에서 pop한다!

모든 문자를 점검했을때, 스택이 비어있다면, 성공 아니면 실패를 출력한다.


주의할 점

1.스택이 비어있는데 ')' 가 나온다면, 오류가 나므로, 이 경우를 잘 검사해야 한다.


코드

#include <iostream>
#include <stack>
using namespace std;

int main()
{
	int repeat;
	cin >> repeat;

	for (int i = 0; i < repeat; i++)
	{

		stack<char> BOJstack;
		/*
		괄호의 진행 상황을 저장할 스택을 선언!
		이 스택은 단지 스택의 역할만 하면 되기 때문에,
		가장 크기가 적은 char형으로 선언해주었다.
		*/
		string cmd;
		cin >> cmd;

		for (int j = 0; j < cmd.length(); j++)
		{
			if (cmd[j] == '(')//만약 괄호의 시작 부분이라면 스택에 적립
				BOJstack.push('(');
			else {//만일 괄호의 끝 부분이라면
				if (BOJstack.empty()) {//큐가 비어있는데, 끝부분이라면 반드시,NO!
					BOJstack.push(')');//반복문 후에 스택에 남아있어야 NO를 출력할 수 있따.
					break;//반복문 바로 탈출
				}
				else//괄호가 한 쌍 이니까 pop!
					BOJstack.pop();
			}
		}

		if (BOJstack.empty())//스택이 비어있어야 통과!
			cout << "YES" << endl;
		else
			cout<<"NO"<<endl;
	}
}


잘못된 부분이나 오해할 수 있는 부분이 있다면 언제든지 

댓글 남겨주시기 바랍니다!

728x90