[백준/BOJ] 백준 3986번 : 좋은 단어

2020. 9. 15. 21:56알고리즘 문제풀이

www.acmicpc.net/problem/3986

 

3986번: 좋은 단어

이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에 �

www.acmicpc.net

단어의 문자를 스택에 넣으면서 스택의 top부분과 스택에 넣으려고 하는 문자가 같을 때 다른 선과 교차하지 않으면서 문자를 짝지을 수 있는 것이므로 짝지어진 문자는 스택에서 빼낸다. 해당 단어의 검사가 끝난 뒤 스택이 비어있다면 그 단어는 좋은 단어이다.

 

코드

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

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	int n;
	int result = 0;

	cin >> n;

	for (int i = 0; i < n; i++)
	{
		string word;
		stack<char> s;

		cin >> word;

		for (int i = 0; i < word.size(); i++)
		{
			//스택이 비어 있을때
			if (s.empty())
				s.push(word[i]);

			else
			{
				char s_top = s.top();

				//스택의 top 부분과 word[i]가 같을때
				if (s_top == word[i])
					s.pop();

				else
					s.push(word[i]);
			}
		}

		//word의 검사가 끝난뒤 스택이 비어 있다면 모든 A와B의 쌍이 정해진것이므로 좋은단어이다
		if (s.empty())
			result++;
	}

	cout << result;

	return 0;
}