코딩고치

[백준][자료구조]쇠막대기 본문

백준 알고리즘 기초/자료구조

[백준][자료구조]쇠막대기

코딩고치 2019. 9. 6. 04:17

이 문제는 이전에 올렸던 괄호 문제를 응용하여 풀 수 있다. 괄호의 인덱스를 이용하여 레이저인지 쇠막대기인지 어떻게 구분할 것인지만 잘 고민 한다면 쉽게 풀 수 있었던 문제이다. 

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

int main(void)
{
	int nstick = 0;	//총 막대기
	int result = 0;
	string str;
	stack<char> s;
	getline(cin, str);
	vector<int> lstick;	//1개의 레이저가 통과하는 막대기

	for (int i = 0; i < (int)str.length(); i++)
	{
		if (str[i] == '(')
			s.push(str[i]);
		else
		{
			if (str[i - 1] == str[i])
			{
				s.pop();
				nstick++;
			}
			else
			{
				s.pop();
				lstick.push_back(s.size());	 
            }	//스택에 남아있는 '('수 = 레이저가 통과하는 막대기 수			
		}
	}

	for (int i = 0; i < (int)lstick.size(); i++)
	{
		result += lstick[i];
	}
	cout << result + nstick << '\n';
	return 0;
}

 

Comments