끄적끄적 코딩
article thumbnail

스택 문제입니다.

()가 나오면 쇠막대기를 자르는데 총 몇개의 막대기가 생기는지 구해야합니다.

'(' 일 경우 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;
}

검색 태그