๐ŸŒท๐ŸŒผ๋ชจ์—ฌ๋ด์š” ๊ฐœ๋ฐœ์˜์ˆฒ๐ŸŒท๐ŸŒผ

[JAVA/์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ๋ฐ”๋‘‘์ด ์Šน์ฐจ(DFS) ๋ณธ๋ฌธ

๊ฐœ๋ฐœ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด JAVA

[JAVA/์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ๋ฐ”๋‘‘์ด ์Šน์ฐจ(DFS)

์š”์ผ์ด 2021. 11. 28. 18:25
๋ฐ˜์‘ํ˜•

์„ค๋ช…

์ฒ ์ˆ˜๋Š” ๊ทธ์˜ ๋ฐ”๋‘‘์ด๋“ค์„ ๋ฐ๋ฆฌ๊ณ  ์‹œ์žฅ์— ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ์˜ ํŠธ๋Ÿญ์€ Cํ‚ฌ๋กœ๊ทธ๋žจ ๋„˜๊ฒŒ ํƒœ์šธ์ˆ˜๊ฐ€ ์—†๋‹ค.

์ฒ ์ˆ˜๋Š” C๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ทธ์˜ ๋ฐ”๋‘‘์ด๋“ค์„ ๊ฐ€์žฅ ๋ฌด๊ฒ๊ฒŒ ํƒœ์šฐ๊ณ  ์‹ถ๋‹ค.

N๋งˆ๋ฆฌ์˜ ๋ฐ”๋‘‘์ด์™€ ๊ฐ ๋ฐ”๋‘‘์ด์˜ ๋ฌด๊ฒŒ W๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, ์ฒ ์ˆ˜๊ฐ€ ํŠธ๋Ÿญ์— ํƒœ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ๋ฌด๊ฒŒ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ C(1<=C<=100,000,000)์™€ N(1<=N<=30)์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๋งˆ๋ฆฌ ๋ฐ”๋‘‘์ด์˜ ๋ฌด๊ฒŒ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ๋ฌด๊ฒŒ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์‹œ์ž…๋ ฅ

259 5
81
58
42
33
61

์˜ˆ์‹œ์ถœ๋ ฅ

242

 

- 2022.01.28

import java.util.*;

public class Main {

    static int[] array;
    static int total;
    static int answer = 0;

    public void DFS(int Level, int sum) {

        if(sum > total){
            return;
        }

        if(sum > answer){
            answer = sum;
        }

        if(Level  == array.length) {
            return;
        }

        DFS(Level+1,sum+array[Level]);
        DFS(Level+1, sum);

    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);

        total = in.nextInt();
        int n=in.nextInt();

        array = new int[n];

        for(int i=0; i<n; i++) {
            array[i] = in.nextInt();
        }

        T.DFS(0,0);

        System.out.println(answer);
    }
}

 

import java.util.*;

public class Main {

	static int answer = Integer.MIN_VALUE, c, n;
	public void DFS(int L, int sum, int[] arr){
		if(sum>c){
			return;
		}
		if(L==n){
			answer = Math.max(answer, sum);
		}else{
			DFS(L+1, sum+arr[L], arr);
			DFS(L+1, sum, arr);
		}
		
	}
	
    public static void main(String[] args) {
        Main main = new Main();
		Scanner kb = new Scanner(System.in);
		c = kb.nextInt();
		n = kb.nextInt();
		
		int[] arr = new int[n];
		for(int i=0; i<n; i++){
			arr[i] = kb.nextInt();
		}
		main.DFS(0, 0, arr);
		System.out.println(answer);
	}

}
Comments