https://www.acmicpc.net/problem/22343

 

22343번: 괄호의 값 비교

첫 번째 테스트 케이스: f[A] = f[((()))] = 4이고, f[B] = f[()(())] = 3이므로, f[A] > f[B]이다. 두 번째 테스트 케이스: f[A] = f[(((())))] = 8이고, f[B] = f[()()()()()] = 5이므로, f[A] > f[B] 이다.

www.acmicpc.net

 

 

[난이도] Gold2
[유형] 큰 수 연산

[풀이]
나중에..

 

#include <iostream>
#include <string>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
int T,m;
string a,b;
vector<int> sol2(string s){
    vector<int> ret(m+1);
    int cur=0;
    for(int i=0;i<s.size();i++){
        if(s[i]=='(') cur++;
        else {
            cur--;
            if(s[i-1]=='('){
                ret[cur]++;
            }
        }
    }
    for(int i=0;i<ret.size()-1;i++){
        ret[i+1]+=ret[i]/2;
        ret[i]%=2;
    }
    return ret;
}
string sol(){
    vector<int> pa = sol2(a);
    vector<int> pb = sol2(b);
    for(int i=pa.size()-1;i>=0;i--){
        if(pa[i] < pb[i]) return "<";
        if(pa[i] > pb[i]) return ">"; 
    }
    return "=";
}
int main(){
    cin >> T;
    while(T--){
        cin >> a >> b;
        m=max(a.size(),b.size());
        m/=2;
        cout << sol() << '\n';
    }
}


https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold2/22343.cpp

+ Recent posts