SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
어떻게 배치하는게 최대인지 최소인지 모르니까 완탐 돌리는거 밖에 답이없음
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution_4008 {
static int N,max_value,min_value;
static int[] data, oper;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int T = Integer.parseInt(st.nextToken());
for (int tc = 1; tc < T+1; tc++) {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
oper = new int[4];
data = new int[N];
// {+ - * /}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 4; i++) {
oper[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
data[i] = Integer.parseInt(st.nextToken());
}
max_value = Integer.MIN_VALUE;
min_value = Integer.MAX_VALUE;
dfs(1,data[0]);
System.out.println("#"+tc+" "+(max_value-min_value));
}
}
public static void dfs(int depth, int sum){
if (depth == N){
max_value = Math.max(max_value, sum);
min_value = Math.min(min_value, sum);
return;
}
for (int i = 0; i < 4; i++) {
if (oper[i] == 0)
continue;
oper[i]--;
switch (i){
case 0:
dfs(depth+1,sum+data[depth]);
break;
case 1:
dfs(depth+1,sum-data[depth]);
break;
case 2:
dfs(depth+1,sum*data[depth]);
break;
case 3:
dfs(depth+1,sum/data[depth]);
break;
}
oper[i]++;
}
}
}
'Algorithm > Algorithm Problem' 카테고리의 다른 글
땅지원의 A형 대비 기출 분석 (0) | 2022.10.13 |
---|---|
SWEA 2117 홈 방문 서비스(BFS) (0) | 2022.10.12 |
백준 2056 작업(위상정렬, DP) ★★ (0) | 2022.10.07 |
SWEA 7793 오! 나의 여신님 (BFS) (1) | 2022.10.06 |
백준 17143 낚시왕 (구현, 시뮬레이션) (1) | 2022.10.05 |