C언어

백준 10799번 boj 쇠막대기와 레이저 / stack썼다가 더 쉽게 고침

mcdn 2020. 8. 17. 15:33
반응형

예제 입력 1 복사

()(((()())(())()))(())

예제 출력 1 복사

17

 

#include <iostream>
#include <stack>
#include <cstring>
using namespace std;

int main(void)
{
	char str[100001];
	stack <char> st;
	cin >> str;
	int len = strlen(str);
	int cnt = 0; 
	//int curr_size = 0;
	for (int i = 0; i < len; i++)
	{
		if (str[i] == '(')
		{
			st.push(str[i]);
			if (str[i + 1] && str[i + 1] != ')')
				cnt += 1;
		}
		else if (str[i] == ')')
		{
			if (str[i - 1] && str[i - 1] == ')')
				st.pop();
			else
			{
				st.pop();
				cnt += st.size();
			}
		}
	}
	cout << cnt;
}

직접 괄호 char를 넣은 것 

굳이 메모리 더 쓰고 복잡함 

 

#include <iostream>
#include <cstring>
using namespace std;

int main(void)
{
	char str[100001];
	int top = 0;
	cin >> str;
	int len = strlen(str);
	int cnt = 0; 
	for (int i = 0; i < len; i++)
	{
		if (str[i] == ')')
		{
			if (str[i - 1] == ')')
			{
				top--;
				cnt++;
			}
			else // laser
			{
				top--;
				cnt += top;
			}
		}
		else
			top++;
	}
	cout << cnt;
}

 

( 괄호로만 확인하고 

따로 stack을 안해서 간결하다. 

반응형