알고리즘
[Java] 백준 16938번 캠프 준비
J3SUNG
2023. 6. 21. 19:40
728x90
브루트포스 문제입니다.
규칙에 맞게 가능한 경우의 수를 구해야합니다.
규칙
1. 두 문제 이상
2. 문제의 난이도의 합이 L보다 크거나 같고 R보다 작거나 같음
3. 가장 어려운 문제와 가장 쉬운문제의 차이는 X보다 큼
DFS를 돌면서 위의 규칙에 해당하면 카운팅을 해주었습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int n;
static int l;
static int p;
static int x;
static int result;
static int[] a;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
l = Integer.parseInt(st.nextToken());
p = Integer.parseInt(st.nextToken());
x = Integer.parseInt(st.nextToken());
result = 0;
a = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; ++i) {
a[i] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < n; ++i) {
DFS(i, a[i], a[i], a[i], 1);
}
bw.write(result + "\n");
bw.close();
}
public static void DFS(int index, int low, int high, int sum, int cnt) {
if(sum >= l && sum <= p && cnt > 1 && low <= high - x) {
++result;
}
for(int i=index+1; i<n; ++i){
DFS(i, a[i] < low ? a[i] : low, a[i] > high ? a[i] : high, sum + a[i], cnt + 1);
}
}
}