person456 2024. 1. 24. 20:17

** 코드

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package inflearn_8_dfs_bfs_uses;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
 
public class inflearn8_2 {
    static int n,m,k;
    static int[] arr;
    static int total;
    static StringTokenizer st;
    static StringBuilder sb;
    static Set<Integer> set;
    static boolean[] visited;
    static long max;
    public static void main(String[] args)throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        st = new StringTokenizer(br.readLine(), " ");
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        arr = new int[m];
        for(int i=0; i<m; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }
        max = Integer.MIN_VALUE;
        dfs(00);
        System.out.println(max);
        br.close();
        bw.close();
    }
    static void dfs(int index, int sum) {
        if(sum>n)return;
        if(index>=m) {
            if(sum<=n) {
                max = Math.max(max, sum);
            }
            return;
        }
        dfs(index+1, sum+arr[index]);
        dfs(index+1, sum);
    }
}
 
cs

 

가장 간단하고 쉽게 풀 수 있는 DFS를 활용한 완전탐색 문제

DFS를 통해 얻어낸 sum 값이 n을 넘지 않는다면 그 중 최고값을 max에 저장하는 방식으로 풀었다.