BOJ : 10799 쇠막대기 (C++)

11033 단어 bojRERE

문제

Code

  • '(' 일때는 stack에 push
  • ')' 일때
    1) 바로 직전이 '(' --> (레이저임) +stack.size()
    2) 바로 직전이 '('가 아니면 --> +1

[ 최적 코드 ]

#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main(void)
{
	int sum = 0;
	stack<char> S;
	string s;
	cin >> s;

	for(int i=0;i<s.size();i++)
	{
		if (s[i] == '(')
			S.push('(');
		else
		{
			S.pop();
			if (s[i - 1] == '(')
			{
				sum += S.size();
			}
			else
			{
				sum += 1;
			}
		}
	}
	cout << sum;
}

[ 다르게 푼 코드 ]

#include <iostream>
#include <stack>

using namespace std;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    stack<char> s;
    string str;
    int cur_cnt=0, tot_cnt=0,flag=0;
    cin >> str;
    for(int i=0; i< str.length();i++)
    {
        char a = str[i];
        if( a == '('){
            cur_cnt++;
            if(s.empty()){
                flag=1;
            }else{
                flag=0;
            }
            s.push(a);
        }else if( a==')'){
            cur_cnt--;
            if(s.size() == 1){
                if(flag == 0){
                    tot_cnt ++;
                }else{
                    flag=0;
                }
            }
            else{
                if(str[i-1] == ')')
                    tot_cnt++;
                else
                    tot_cnt += cur_cnt;
            }
            s.pop();
        }
    }
    cout << tot_cnt;
}
  • 증가 경우를 잘못 파악해서 돌아서 코딩함; 이런ㅎㅎ;

좋은 웹페이지 즐겨찾기