본문 바로가기

알고리즘(C++)/백준 알고리즘

[백준] C++ 10799번 : 쇠막대기

풀이과정


입력받은 문자를 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;
}