

풀이과정
입력받은 문자를 stack에 저장한다.
입력받은 문자가 ')'일 때, 직전에 입력받은 문자가 '('라면 레이저를 나타내고, ')'라면 막대기가 끝났음을 나타낸다.
'(' 입력 -> stack에 추가
')' 입력 : 1. 직전이 '(' (레이저) -> stack의 사이즈만큼 잘려진 조각 수 증가
2. 직전이 ')' (쇠막대기 끝남) -> 잘려진 조각 수 +1 증가
코드
더보기
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
string s = "";
stack<char> st;
int iCount = 0;
cin >> s;
for (int i = 0; i < s.length(); ++i)
{
if (s[i] == '(') st.push(s[i]);
else
{
st.pop();
if (s[i-1] == '(') iCount += st.size();
else iCount++;
}
}
cout << iCount << endl;
return 0;
}
'알고리즘(C++) > 백준 알고리즘' 카테고리의 다른 글
| [백준] C++ 2504번 : 괄호의 값 (0) | 2019.11.08 |
|---|---|
| [백준] C++ 1874번 : 스택 수열 (0) | 2019.11.07 |
| [백준] C++ 9012번 : 괄호 (1) | 2019.11.07 |
| [백준] C++ 10828번 : 스택 (0) | 2019.11.07 |
| [백준] C++ 1159번 : 농구 경기 (0) | 2019.11.07 |