[백준] 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

  • 되도록이면 푼 문제들 계속 올리도록 하겠습니다…
  • 또 간혹 설명이 이해가 안간다면 말해주시면 그림까지 같이 넣는 노력을 하겠습니다. 감사합니다.

댓글남기기