알고리즘(인프런)/8. DFS, BFS 활용
8-3. 최대점수 구하기(DFS)
ch.0
2023. 1. 4. 17:11
문제
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
//백준
public class Main {
static int[] array;
static int[] visited;
static int size;
static int total;
static int re = Integer.MIN_VALUE;
public static void dfs(int point, int time, int sum) {
int ch = sum;
if(time<=total&&sum>re) re=sum;
if(time<total&&point<size*2) {
// System.out.println("sum("+(sum + array[point-1] )+") = sum["+sum+"] + array["+(point-1)+"] = "+ch+" + "+array[point-1]);
dfs(point+2, time + array[point], sum+array[point-1]);
dfs(point+2, time, sum );
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// Queue<Integer> q = new LinkedList<>();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
size = Integer.parseInt(st.nextToken());
total = Integer.parseInt(st.nextToken());
array = new int[size*2];
// visited = new int[size];
for (int i = 0; i < size*2; i++) {
st = new StringTokenizer(br.readLine(), " ");
array[i] = Integer.parseInt(st.nextToken());
i++;
array[i] = Integer.parseInt(st.nextToken());
}
dfs(1,0,0);
System.out.println(re);
}
}
시간이 초과되기 전까지 합을 다 구해본다.
이차배열로 값을 해도되고 지금과 같은 문제는 홀/짝으로 구분이 가능해서 짝에 점수 홀에 시간을 두고 계산했다.