DFS, 부분집합, 최대점수 구하기
✅ n개의 문제를 제한시간 내에 풀어 최대 점수 얻기
제한시간 m안에 n개의 문제 중 최대점수를 얻을 수 있도록 해야 합니다.
첫 줄에 문제의 개수 n과 제한시간 m이 주어집니다.
두 번째 줄부터 n줄에 걸쳐 문제를 풀었을 때 점수와 푸는 시간이 주어집니다.
✔️ input & output
1
2
3
4
5
6
7
8
5 20
10 5
25 12
15 8
6 3
7 4
//output: 41
🟢
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Main {
static int n;
static int m;
static int answer;
static int[] scoreArr;
static int[] timeArr;
public void DFS(int L, int score, int time) {
if(time>m) return;
if(L==n) answer= Math.max(score, answer);
else{
DFS(L+1, score+scoreArr[L], time+timeArr[L]);
DFS(L+1, score, time);
}
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
scoreArr= new int[n];
timeArr= new int[n];
for(int i=0; i<n; i++){
scoreArr[i]= sc.nextInt();
timeArr[i] = sc.nextInt();
}
T.DFS(0, 0, 0);
System.out.print(answer);
}
}
이 문제도 부분집합에 포함 될지/ 안 포함될지 푸는 문제이다.
즉, 문제를 풀지/ 안 풀지 를 가지고 해결하는 문제 유형
DFS 함수에 레벨, 점수, 시간을 인자로 주고
문제를 풀면 레벨++, 점수 올라가고, 시간 올라가고
문제를 안 풀면 레벨만 ++
⭐️ 입력을 어떻게 처리할지 고민이었는데
저렇게 두 줄이 들어오면 2차원 배열로? 리스트로? ❌
각각 배열로 받아도 된다. ⭕️
그래서 점수를 저장하는 배열, 시간을 저장하는 배열을 따로 두기
This post is licensed under CC BY 4.0 by the author.