백준 알고리즘 기초/자료구조
[백준][자료구조]쇠막대기
코딩고치
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;
}