문제 URL : www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
문제 접근법 :
모든 연산자를 사용하면서 모든 계산을하여 모든경우의 수를 구합니다.
dfs로 쉽게 해결할수있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
//By 콩순이냉장고
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
vector<int> v;
int n;
int op[4];
int Max = -1e+10;
int Min = 1e+10;
int calc(int a,int b,int idx) {
if (idx == 0)
return a + b;
else if (idx == 1)
return a - b;
else if (idx == 2)
return a * b;
else
return a / b;
}
void dfs(int sum,int idx=1) {
if (idx >= n) {
Max = max(sum, Max);
Min = min(sum, Min);
return;
}
for (int i = 0; i < 4; i++) {
if (op[i]) {
op[i]--;
dfs(calc(sum, v[idx], i), idx + 1);
op[i]++;
}
}
}
void input() {
cin >> n;
v.resize(n);
for (int i = 0; i < n; i++)
cin >> v[i];
for (int i = 0; i < 4; i++) {
cin >> op[i];
}
}
void solve() {
dfs(v[0]);
cout << Max << "\n";
cout << Min << "\n";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
input();
solve();
}
|
cs |
궁금한점 혹은 모르는점 어떤아이디어나 어떤질문이든 댓글은 환영입니다.
'백준' 카테고리의 다른 글
백준 1600 말이 되고픈 원숭이 (0) | 2021.04.05 |
---|---|
백준 2931 가스관 (0) | 2021.04.05 |
백준 14502 연구소 (0) | 2021.02.17 |
백준 2568 전깃줄 - 2 (0) | 2021.02.15 |
백준 3745 오름세 (0) | 2021.02.15 |