스택 문제입니다.
()가 나오면 쇠막대기를 자르는데 총 몇개의 막대기가 생기는지 구해야합니다.
'(' 일 경우 stack에 push해주고
')' 일 경우 pop을 해준 후
앞의 글자가 '(' 인 경우 레이저를 쏴줍니다. = 카운트에 현재 스택의 크기를 추가합니다.
앞의 글자가 ')' 인 경우 막대기가 끝나는 지점 = 카운트를 증가해줍니다. (하나의 막대기 자체를 세어줍니다.)
#include <iostream>
#include <algorithm>
#include <string>
#include <stack>
using namespace std;
int main(int argc, char *argv[])
{
string str;
stack<int> s;
int count = 0;
cin >> str;
for (int i = 0; i < str.length(); ++i) {
if (str[i] == '(') {
s.push(str[i]);
}
else {
s.pop();
if (str[i - 1] == '(') {
count += s.size();
}
else {
++count;
}
}
}
cout << count << endl;
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 9205번 맥주 마시면서 걸어가기 (0) | 2019.09.25 |
---|---|
[C++] 백준 10800번 컬러볼 (0) | 2019.09.25 |
[C++] 백준 2846번 오르막길 (0) | 2019.09.24 |
[C++] 백준 2669번 직사각형 네개의 합집합의 면적 구하기 (0) | 2019.09.24 |
[C++] 백준 2475번 검증수 (0) | 2019.09.24 |