-
[BOJ]14888_Java_연산자 끼워넣기알고리즘문제풀이/백준 2021. 10. 16. 14:22
--문제--
https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
--문제접근--
- 1+2+3-4×5÷6 = 1
- 1÷2+3+4-5×6 = 12
- 1+2÷3×4-5+6 = 5
- 1÷2×3-4+5+6 = 7
이조건을 보면 순서를 고려하여 모든 조합을 고려하는걸 볼 수있습니다. 그리하여 순열을 구현하면 될것 이라고 생각하였습니다.
--코드--
package 준비운동; import java.util.Scanner; public class 연산자끼워넣기 { static int[] num,math; static int N,maxV,minV; public static void main(String[] args) { Scanner sc=new Scanner(System.in); maxV=Integer.MIN_VALUE;minV=Integer.MAX_VALUE; N=sc.nextInt(); num=new int[N]; for(int i=0;i<N;i++) { num[i]=sc.nextInt(); } math=new int[4]; for(int i=0;i<4;i++) { math[i]=sc.nextInt(); } sum(1,num[0]); System.out.println(maxV); System.out.println(minV); } private static void sum(int level,int sum) { if(level==N) { maxV=Integer.max(sum, maxV); minV=Integer.min(sum, minV); return; } if(math[0]>0) { math[0]--; sum(level+1,sum+num[level]); math[0]++; } if(math[1]>0) { math[1]--; sum(level+1,sum-num[level]); math[1]++; } if(math[2]>0) { math[2]--; sum(level+1,sum*num[level]); math[2]++; } if(math[3]>0) { math[3]--; sum(level+1,sum/num[level]); math[3]++; } } }
'알고리즘문제풀이 > 백준' 카테고리의 다른 글
[BOJ]2178_JAVA_미로탐색 (0) 2021.10.18 [BOJ]2504_괄호의값_Java (0) 2021.10.16 [BOJ]3460_이진수_Java (0) 2021.09.24 [BOJ]2501_JAVA_약수구하기 (0) 2021.09.20 [BOJ]10942_팰린드롬_Java (0) 2021.07.29