728x90
삼성 SW 역량 테스트 기출 문제이자 단계별로 풀어보기 백트래킹의 7단계 문제
처음에 분명히 맞게 풀었는데 컴파일 에러가 나는 것이었다. 원인은 min과 max라는 변수 이름 때문이었다.
따라서 min을 minn으로, max를 maxx로 바꿔줬더니 성공
#include <iostream>
using namespace std;
int n;
int* numbers;
int maxx = -1000000000;
int minn = 1000000000;
void select(char* oper, int num, int plusRemain, int minusRemain, int multiplyRemain, int divideRemain) {
if (num == n - 1) {
int result = numbers[0];
for (int i = 0; i < n - 1; i++) {
switch (oper[i]) {
case '+':
result += numbers[i + 1]; break;
case '-':
result -= numbers[i + 1]; break;
case '*':
result *= numbers[i + 1]; break;
case '/':
result /= numbers[i + 1]; break;
}
}
if (result > maxx) maxx = result;
if (result < minn) minn = result;
return;
}
if (plusRemain > 0) {
oper[num] = '+';
select(oper, num + 1, plusRemain - 1, minusRemain, multiplyRemain, divideRemain);
}
if (minusRemain > 0) {
oper[num] = '-';
select(oper, num + 1, plusRemain, minusRemain - 1, multiplyRemain, divideRemain);
}
if (multiplyRemain > 0) {
oper[num] = '*';
select(oper, num + 1, plusRemain, minusRemain, multiplyRemain - 1, divideRemain);
}
if (divideRemain > 0) {
oper[num] = '/';
select(oper, num + 1, plusRemain, minusRemain, multiplyRemain, divideRemain - 1);
}
}
int main() {
cin >> n;
numbers = new int[n];
for (int i = 0; i < n; i++) {
cin >> numbers[i];
}
int plus, minus, multiply, divide;
cin >> plus >> minus >> multiply >> divide;
char* oper = new char[n - 1];
select(oper, 0, plus, minus, multiply, divide);
cout << maxx << endl;
cout << minn << endl;
return 0;
}
728x90
'알고리즘 문제' 카테고리의 다른 글
[백준] 10809번 알파벳 찾기 (0) | 2020.01.26 |
---|---|
[백준] 14889번 스타트와 링크 (0) | 2020.01.25 |
[백준] 1152번 단어의 개수 (0) | 2020.01.25 |
[백준] 2580번 스도쿠 (0) | 2020.01.25 |
[백준] 2775번 부녀회장이 될테야 (0) | 2020.01.24 |