[C언어] 14888. 연산자 끼워넣기

SW 업무 관련/백준

[C언어] 14888. 연산자 끼워넣기

WillBe_ 2018. 9. 25. 21:17

입력된 연산자의 개수에 맞게 조합..?을 구한 후!!


처음에 입력 된 수부터 차례대로 조합에 따라 계산해 나가면 끝~


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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <string.h>
 
#define MAX 1500000000
#define MIN -1500000000
 
int N, Min, Max, a, b, c, d;
int Number[12];
int Cal[11];
 
 
void DFS(int n,int aa, int bb, int cc, int dd)
{
    if (aa > a || bb > b || cc > c || dd > d)
        return;
 
    if (n == N - 1)
    {
        int temp = Number[0];
        for (int i = 0; i < N; i++)
        {
            switch (Cal[i])
            {
            case 1:
                temp += Number[i + 1];
                    break;
            case 2:
                temp -= Number[i + 1];
                break;
            case 3:
                temp *= Number[i + 1];
                break;
            case 4:
                temp /= Number[i + 1];
                break;
            }
        }
 
        if (temp > Max)
            Max = temp;
        if (temp < Min)
            Min = temp;
        return;
    }
 
    Cal[n] = 1;
    DFS(n + 1, aa + 1, bb, cc, dd);
    Cal[n] = 2;
    DFS(n + 1, aa, bb + 1, cc, dd);
    Cal[n] = 3;
    DFS(n + 1, aa, bb, cc + 1, dd);
    Cal[n] = 4;
    DFS(n + 1, aa, bb, cc, dd + 1);
 
    return;
}
 
int main()
{
    scanf("%d"&N);
    Max = MIN;
    Min = MAX;
 
    for (int i = 0; i < N; i++)
    {
        scanf("%d"&Number[i]);
    }
    scanf("%d %d %d %d"&a, &b, &c, &d);
 
    DFS(00000);
 
    printf("%d\n%d",Max, Min);
 
    return 0;
}
cs


'SW 업무 관련 > 백준' 카테고리의 다른 글

[C언어] 3108. 로고  (0) 2018.09.26
[C언어] 10164. 격자상의 경로  (0) 2018.09.25
[C언어] 15686. 치킨배달  (0) 2018.09.25
[C언어] 14889 스타트와 링크  (0) 2018.09.25
[C언어] 14890. 경사로  (0) 2018.09.25