본문 바로가기
백준

백준 14888 연산자 끼워넣기

by 콩순이냉장고 2021. 2. 17.

문제 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