쇠막대기

- 괄호를 통해 쇠막대기와 레이저를 표현하고 총 몇조각으로 나뉘어졌는 지 확인하는 문제

[풀이]

1) 괄호가 '('인 경우 stack에 pop하고

2) 괄호가 ')'인 경우 2가지로 나누어 처리

   2-1) 직전에 열리고 닫힌 '()'인 경우 stack에 저장된 갯수 -1개 만큼 총 수에 더한다.

   2-2) 직전에 열린게 아니면 총 수에 1을 더한다.

   2-fin) 2-1, 2-2 작업 후 스택에 pop을 하여 하나를 빼낸다.

 

 

[결과]

#include <iostream>
#include <string>
#include <stack>

using namespace std;
int main()
{	
	stack<char> stOpen;
	string input;
	cin >> input;

	int result = 0;
	char preChar = NULL;
	for (auto ch : input)
	{		
		if (ch == '(')
		{
			stOpen.push(ch);
		}
		else
		{
			if (preChar == '(')
			{
				result += stOpen.size() - 1;
			}
			else
			{
				result++;
			}
			stOpen.pop();
		}
		preChar = ch;
	}

	cout << result << endl;

	return 0;
}

 

+ Recent posts