코딩테스트
[BOJ_14888/JAVA] 연산자 끼워 넣기
Eun
2022. 2. 11. 11:44
문제
풀이
처음에는 DFS로 풀어야하는지모르고 큰수일땐 *다음에...+다음에...-다음에... 작을수일땐 /다음에...-다음에.....주저리주저리 구현으로 풀려고했다.
하지만 다른사람 코드를 보니 DFS로 푸니 코드가 훨씬 짧아진것을 볼 수 있었다...
DFS로 풀겠다는 아이디어를 얻기위해서 아직 갈길이 멀다..
index(수열의 개수)가 점점 늘어가다가 수열이 n이 되었을때 최솟값과 최댓값을 계속해서 구해나가는 식으로 풀었다.
그리고 자바에서는 Integer 클래스를 사용하면 정수의 최댓값, 최솟값 필드를 사용하 수 있다.
Integer.MAX_VALUE;
Integer.MIN_VALUE;
코드
package Week11;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ14888 {
static int oper[]= new int[4];
static int a[];
static int max=Integer.MIN_VALUE;
static int min=Integer.MAX_VALUE;
static int n;
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
a=new int[n];
for(int i=0;i<n;i++) {
a[i]=Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for(int i=0;i<4;i++) {
oper[i]=Integer.parseInt(st.nextToken());
}
dfs(a[0],1);
System.out.println(max);
System.out.println(min);
}
static void dfs(int num, int index) {
if(n==index) {
max=Math.max(num, max);
min=Math.min(num, min);
return;
}
else {
for(int i=0;i<4;i++) {
if(oper[i]>0) {
oper[i]--;
switch(i) {
case 0 : dfs(num+a[index], index+1); break;
case 1 : dfs(num-a[index], index+1); break;
case 2 : dfs(num*a[index], index+1); break;
case 3 : dfs(num/a[index], index+1); break;
}
oper[i]++;
// 다시 연산자 개수 복구
}
}
}
}
}