반응형

문제 링크

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 

www.acmicpc.net

 

풀이 )

  2개의 vector를 사용했다. 각각 숫자를 저장한 vector a, 연산자를 저장한 vector op이다.

  op에는 +, -, *, /를 의미하는 0, 1, 2, 3를 각 연산자의 수에 맞게 넣었다.

  이후 next_permutation()을 사용하여 op vector안에 있는 연산자의 순서를 바꿔가면서 값을 비교한다.

 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(void){
    int n;
    cin >> n;
    vector<int> a(n);
    vector<int> op;
    int mini = 1e9;
    int maxi = -1e9;

    for(int i = 0; i < n; ++i)
        cin >> a[i];
    for(int i = 0; i < 4; ++i){
        int numOp;
        cin >> numOp;
        if(!numOp)
            continue;
        for(int j = 0; j < numOp; ++j)
            op.push_back(i);
    }

    do{
        int tmp = a[0];
        for(int i = 0; i < n-1; ++i){
            switch(op[i]){
                case 0:
                    tmp += a[i+1];
                    break;
                case 1:
                    tmp -= a[i+1];
                    break;
                case 2:
                    tmp *= a[i+1];
                    break;
                case 3:
                    tmp /= a[i+1];
            }
        }
        mini = min(tmp, mini);
        maxi = max(tmp, maxi);
    }
    while(next_permutation(op.begin(), op.end()));

    cout << maxi << endl << mini << endl;
}

 

주의)

- 최댓값과 최솟값을 단순 0으로 초기화하면 안된다.  ex ) 최댓값이 음수인 경우 답과 무관하게 0으로 나온다.

- next_permutaion()을 사용한 부분에서 do while문이 아닌 while문을 사용할 경우 처음 연산자 순서는 계산을 안하게 된다.

반응형

'문제풀이 > 백준' 카테고리의 다른 글

[C++] 백준 - 1002 : 터렛  (0) 2020.11.29
[C++] 백준 - 14891 : 톱니바퀴  (0) 2020.11.27
[C++] 백준 - 2583 : 영역 구하기  (0) 2020.11.25
[C++] 백준 - 4796 : 캠핑  (0) 2020.11.23
[C++][JAVA] 백준 - 1012 : 유기농 배추  (0) 2020.11.20

+ Recent posts