본문 바로가기

CodingTest Exam/[C++] Algorithm Study

54. 올바른 괄호(stack) (it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비) ★★★☆☆

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

using namespace std;
int main()
{
	stack<char> s;
	char a[30];
	scanf("%s", &a);
	
	for(int i = 0; a[i] != '\0'; i++)
	{
		if(a[i] == '(')
			s.push(a[i]);
		else if(a[i] == ')')
		{
			if(s.empty())
			{
				printf("NO");
				return 0;
			}
			else
				s.pop();
		}
	}
	
	if(s.empty())
		printf("YES");
	else
		printf("NO");
		
	return 0;
}

1. string 입력을 저장할 char 배열 astack s 를 선언한다.

2. char a 의 원소를 확인하면서 '(' 라면 push, ')' 라면 pop을 한다.

3. 만약 pop을 하려는데 stack이 비어있다면, 올바르지 않은 괄호이므로 "NO"를 출력하고 return 0;

-> ()()()) 을 예로 들 수 있다.

4. for 문이 끝나고나서 stack 이 비어있다면 "YES"를, 그렇지 않다면 "NO"를 출력한다.

-> ()()() 는 push와 pop의 횟수가 같으므로 stack이 비게 된다.

-> ()()( 는 '('이 stack에 남게 된다.