-
[BOJ] #14888 _ 연산자 끼워넣기Problem Solving/BOJ 2019. 8. 28. 21:36
[연산자 끼워넣기] https://www.acmicpc.net/problem/14888
연산자의 순서를 모든 경우의 수로 다 계산한 후 최대, 최소 값을 구하는 문제이다.
간단하게 next_permutation을 이용하여 구현하였다.
처음에 MAX 값을 999999로 설정하였으나, 틀렸다.
출력을 읽어보면, 범위가 -10억 ~ 10억이라고 되어있다. (문제를 똑바로 읽어야겠다.)
MAX의 값을 10억으로 설정해주었더니 통과되었다 :)
[ 소스 코드 ]
#include <cstdio> #include <vector> #include <algorithm> #define INF 1000000000 #define MAX 12 #define ADD 0 #define SUB 1 #define MUL 2 #define DIV 3 using namespace std; int n, max_val = -INF, min_val = INF; int number[MAX], op[4]; vector<int> v; void solve(); int calcNumber(); int main() { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &number[i]); for (int i = 0; i < 4; i++) scanf("%d", &op[i]); solve(); printf("%d\n%d\n", max_val, min_val); return 0; } void solve() { for (int i = 0; i < 4; i++) { for (int j = 0; j < op[i]; j++) { v.push_back(i); } } do { max_val = max(max_val, calcNumber()); min_val = min(min_val, calcNumber()); } while (next_permutation(v.begin(), v.end())); } int calcNumber() { int result = number[0]; for (int i = 0; i < n - 1; i++) { switch (v[i]) { case ADD: result += number[i + 1]; break; case SUB: result -= number[i + 1]; break; case MUL: result *= number[i + 1]; break; case DIV: result /= number[i + 1]; break; } } return result; }
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] #17070 _ 파이프 옮기기1 (0) 2019.08.28 [BOJ] #14891 _ 톱니바퀴 (0) 2019.08.28 [BOJ] #14503 _ 로봇 청소기 (0) 2019.08.28 [BOJ] #14501 _ 퇴사 (0) 2019.08.28 [BOJ] #14499 _ 주사위 굴리기 (0) 2019.08.28 댓글