입력된 연산자의 개수에 맞게 조합..?을 구한 후!!
처음에 입력 된 수부터 차례대로 조합에 따라 계산해 나가면 끝~
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(0, 0, 0, 0, 0); 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 |