반응형
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 |