fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. vector <int> operand; //피연산자 저장
  7. vector <int> op; //연산자 저장
  8. vector <bool> flag; //연산자 사용여부
  9. int low = 100000000; //최솟값
  10. int hight = -100000000; //최댓값
  11. int AC = 0; //계산 결과
  12.  
  13. void solution(int a)
  14. {
  15. if (a == op.size())
  16. {
  17. if (hight < AC) hight = AC; //계산 결과가 크다면
  18. if (low > AC) low = AC; //계산 결과가 작다면
  19. return;
  20. }
  21. if (a == 0) AC = operand[0]; //첫 계산일 경우 첫 번째 피연산자로 초기화
  22. for (int i = 0; i < op.size(); i++)
  23. {
  24. if (flag[i]) continue; //해당 연산자를 사용하였는가?
  25. int buffer = AC; //재귀 함수 종료에 따른 AC 백업
  26.  
  27. switch (op[i]) //연산자에 맞춰서 계산
  28. {
  29. case 0:
  30. AC += operand[a + 1];
  31. break;
  32. case 1:
  33. AC -= operand[a + 1];
  34. break;
  35. case 2:
  36. AC *= operand[a + 1];
  37. break;
  38. case 3:
  39. AC /= operand[a + 1];
  40. default:
  41. break;
  42. }
  43.  
  44. flag[i] = true; //연산자 사용 처리
  45. solution(a + 1);
  46.  
  47. AC = buffer; //계산 결과 백업
  48. flag[i] = false; //연산자 미사용 처리
  49. }
  50. }
  51.  
  52. int main(void)
  53. {
  54. int n;
  55. cin >> n;
  56.  
  57. for (int i = 0; i < n; i++)
  58. {
  59. int num;
  60. cin >> num;
  61. operand.push_back(num); //피연산자 저장
  62. }
  63.  
  64. for (int i = 0; i < 4; i++)
  65. {
  66. int operation;
  67. cin >> operation;
  68.  
  69. if (operation)
  70. {
  71. for(int j = 0; j < operation; j++)
  72. {
  73. flag.push_back(false); //연산자 사용여부 저장
  74. switch (i)
  75. {
  76. case 0: // +
  77. op.push_back(0);
  78. break;
  79. case 1: // -
  80. op.push_back(1);
  81. break;
  82. case 2: // ÷
  83. op.push_back(2);
  84. break;
  85. case 3: // ×
  86. op.push_back(3);
  87. break;
  88. default:
  89. break;
  90. }
  91. }
  92. }
  93. }
  94. solution(0);
  95.  
  96. cout << hight << endl << low;
  97. return 0;
  98. }
Success #stdin #stdout 0s 4672KB
stdin
6
1 2 3 4 5 6
2 1 1 1
stdout
54
-24