[백준] 14888 연산자 끼워넣기
업데이트:
백준 14888 연산자 끼워넣기 풀이입니다.
이 문제를 보자마자 완탐에다가 넥퍼뮤를 쓰면 금방 풀겠구나 하고 풀기 시작했습니다.
근데 2번 테케가 자꾸 틀려서 확인해봤더니 *+인 경우는 그냥 넘어가는 것을 알 수 있었습니다. 그래서 계속 검색하며 확인해본 결과 넥퍼뷰는 오름차순으로 정렬 되있어야 모든 경우를 다 확인한다는 것을 알수있었습니다….
Source Code:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
#define MAX 1000000001
int N;
vector<int> Number;
vector<char> Operator;
char temp[4] = {'+','-','*','/'};
long long max_result = -MAX;
long long min_result = MAX;
int main() {
cin >> N;
for (int i = 0; i < N; i++) {
int a;
cin >> a;
Number.push_back(a);
}
for (int i = 0; i < 4; i++) {
int o;
cin >> o;
for (int j = 0; j < o; j++) {
Operator.push_back(temp[i]);
}
}
sort(Operator.begin(), Operator.end()); // 이부분이 없어서 테케가 자꾸 틀렸었습니다. 이 부분 유의
do {
long long Cal = Number[0];
int idx = 1;
for (auto op : Operator) {
if (op == '+') {
Cal += Number[idx];
}
else if (op == '-') {
Cal -= Number[idx];
}
else if (op == '*') {
Cal *= Number[idx];
}
else {
Cal /= Number[idx];
}
idx++;
}
max_result = max(max_result, Cal);
min_result = min(min_result, Cal);
} while (next_permutation(Operator.begin(), Operator.end()));
cout << max_result << endl;
cout << min_result << endl;
return 0;
}
궁금하신 점은 댓글 남겨 주세요!!
Summary
- 되도록이면 푼 문제들 계속 올리도록 하겠습니다…
- 또 간혹 설명이 이해가 안간다면 말해주시면 그림까지 같이 넣는 노력을 하겠습니다. 감사합니다.
댓글남기기