# 백준 : 연산자 끼워넣기 (14888)
문제
https://www.acmicpc.net/problem/14888소스
(Github: https://github.com/wonjnlee/wallydev/blob/master/bj_14888_operatorinception)#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <list>
#include <cmath>
using namespace std;
long long int max_val = -1000000000;
long long int min_val = 1000000000;
int N;
int numbers[12];
int _add, _min, _mul, _div;
void DFS(int index, long long int temp_result) {
if(index == N) {
max_val = max(max_val, temp_result);
min_val = min(min_val, temp_result);
return;
}
if(_add) {
_add -= 1;
DFS(index + 1, temp_result + numbers[index]);
_add += 1;
}
if(_min) {
_min -= 1;
DFS(index + 1, temp_result - numbers[index]);
_min += 1;
}
if(_mul) {
_mul -= 1;
DFS(index + 1, temp_result * numbers[index]);
_mul += 1;
}
if(_div) {
_div -= 1;
DFS(index + 1, temp_result / numbers[index]);
_div += 1;
}
}
int main(void)
{
cin>>N;
for(int i=0; i<N; i++) cin>>numbers[i];
cin>>_add>>_min>>_mul>>_div;
DFS(1, numbers[0]);
cout<<max_val<<endl<<min_val<<endl;
return 0;
}
풀이
굉장히 쉽게 풀었는데, 문제에 나온 용어의 이해를 잘못해서 좀 많은 실수가 있었다.우선 문제 설명을 하자면, 간단하게 백트래킹 하면 된다.
+, -, *, / 각각의 갯수만큼 이 계산 저 계산 하다가 마지막까지 다 하고나서 최대 최소를 비교하면 된다.
문제는 나눗셈 규칙에 'C 기준'이라고 되어있었는데.
내가 어차피 C로 구현하면 그 기준대로 되는걸 굳이 절대값 붙이고 이것저것 하다보니;;
문제를 잘읽자!
댓글
댓글 쓰기