코딩테스트 준비 - 백준 14888번 연산자 끼워넣기

roopre·2022년 1월 25일
0

코딩테스트준비

목록 보기
1/6
post-thumbnail

문제 링크

재귀함수 이용

내코드

void go(vector<int> a, int index, int cur, int plus, int minus, int mul, int div)
{
    if(index == a.size()-1)
    {
        if( cur < min_num)
            min_num = cur;
        if(cur > max_num)
            max_num = cur;
        return;
    }

    else
    {
        if(minus != 0 )
            go(a,index+1,cur-a[index+1],plus,minus-1,mul,div);
        if(div != 0)
            go(a,index+1,cur/a[index+1],plus,minus,mul,div-1);
        if(plus != 0)
            go(a,index+1,cur+a[index+1],plus-1,minus,mul,div);
        if(mul != 0)
            go(a,index+1,cur*a[index+1],plus,minus,mul-1,div);
    }
}

모범코드

pair<int,int> calc(vector<int> &a, int index, int cur, int plus, int minus, int mul, int div)
{
    int n = a.size();
    if(index == n) {
        return make_pair(cur,cur);
    }
    vector<pair<int,int>> res;
    if(plus > 0) {
        res.push_back(calc(a,index+1,cur+a[index],plus-1,minus,mul,div));
    }
    vector<pair<int,int>> res;
    if(minus > 0) {
        res.push_back(calc(a,index+1,cur-a[index],plus,minus-1,mul,div));
    }
    vector<pair<int,int>> res;
    if(mul > 0) {
        res.push_back(calc(a,index+1,cur*a[index],plus,minus,mul-1,div));
    }
    vector<pair<int,int>> res;
    if(div > 0) {
        res.push_back(calc(a,index+1,cur/a[index],plus,minus,mul,div-1));
    }

    auto ans = res[0];
    for (auto p : res) {
        if(ans.first < p.firts) {
            ans.first = p.first;
        }
        if(ans.second > p.second) {
            ans.second = p.second;
        }
    }
    return ans
}

auto 사용과 pair사용, for(auto p : res) 사용 익히기

profile
Roopretelcham

0개의 댓글