- 14888: 연산자 끼워넣기 (다시 풀어보기)
백트래킹, DFS를 사용해야 하는 문제였다.
- 240229 다시 풀기
코드는 다음과 같다.
#include <iostream>
using namespace std;
int N;
int operands[11]; // 수열
int operators[4]; // 연산자의 개수
int mymin = 1000000001;
int mymax = -1000000001;
void getanswer(int result, int idx) {
if(idx == N) // idx로 계산 N번 했는지 세고 N번 했으면 계산종료하도록 함
{
if(result > mymax) //결과값을 max, min과 비교해 새로 저장해줌
mymax = result;
if(result < mymin)
mymin = result;
return;
}
for(int i = 0; i < 4; i++) {
if(operators[i] > 0) {
operators[i]--; // 연산자 하나 사용했으므로 1개 줄여줌
if(i == 0)
getanswer(result + operands[idx], idx+1);
else if(i == 1)
getanswer(result - operands[idx], idx+1);
else if(i == 2)
getanswer(result * operands[idx], idx+1);
else
getanswer(result / operands[idx], idx+1);
operators[i]++; // 다른 연산자를 사용할 것이므로 아까 줄였던 연산자 개수 늘려줌
// 계산후 줄였던 연산자 개수 다시 복원해줌
}
}
return;
}
int main() {
cin >> N;
for(int i = 0; i < N; i++)
cin >> operands[i];
for(int i = 0; i < 4; i++)
cin >> operators[i];
getanswer(operands[0],1);
cout << mymax << '\n';
cout << mymin;
}
'백준' 카테고리의 다른 글
[220819,20] 백준풀기 (25426) (0) | 2022.08.19 |
---|---|
[220731] 백준풀기 (12865) (0) | 2022.07.29 |
[220727] 백준풀기 (15922) (0) | 2022.07.27 |
[220725-26] 백준풀기 (2002) (0) | 2022.07.25 |
[220724] 백준풀기 (1283) (0) | 2022.07.24 |