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

[JAVA/์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ์ตœ๋Œ€ ์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ(DFS) ๋ณธ๋ฌธ

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

[JAVA/์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ์ตœ๋Œ€ ์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ(DFS)

์š”์ผ์ด 2021. 11. 30. 05:29
๋ฐ˜์‘ํ˜•

์„ค๋ช…

์ด๋ฒˆ ์ •๋ณด์˜ฌ๋ฆผํ”ผ์•„๋“œ๋Œ€ํšŒ์—์„œ ์ข‹์€ ์„ฑ์ ์„ ๋‚ด๊ธฐ ์œ„ํ•˜์—ฌ ํ˜„์ˆ˜๋Š” ์„ ์ƒ๋‹˜์ด ์ฃผ์‹  N๊ฐœ์˜ ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋ฌธ์ œ๋Š” ๊ทธ๊ฒƒ์„ ํ’€์—ˆ์„ ๋•Œ ์–ป๋Š” ์ ์ˆ˜์™€ ํ‘ธ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ œํ•œ์‹œ๊ฐ„ M์•ˆ์— N๊ฐœ์˜ ๋ฌธ์ œ ์ค‘ ์ตœ๋Œ€์ ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

(ํ•ด๋‹น๋ฌธ์ œ๋Š” ํ•ด๋‹น์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฉด ํ‘ธ๋Š” ๊ฑธ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค, ํ•œ ์œ ํ˜•๋‹น ํ•œ๊ฐœ๋งŒ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜N(1<=N<=20)๊ณผ ์ œํ•œ ์‹œ๊ฐ„ M(10<=M<=300)์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N์ค„์— ๊ฑธ์ณ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์„ ๋•Œ์˜ ์ ์ˆ˜์™€ ํ‘ธ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์ œํ•œ ์‹œ๊ฐ„์•ˆ์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์ž…๋ ฅ

5 20
10 5
25 12
15 8
6 3
7 4

์˜ˆ์‹œ ์ถœ๋ ฅ

41

 

 

-2022.01.28

import java.util.*;

public class Main {

    static int[] arrayScore;
    static int[] arrayTime;
    static int total;
    static int scoreResult = 0;

    public void DFS(int Level, int sumTime, int score) {

        if(sumTime > total){
            return;
        }

        if(score > scoreResult){
            scoreResult = score;
        }

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

        DFS(Level+1,sumTime+arrayTime[Level], score+arrayScore[Level]);
        DFS(Level+1, sumTime, score);

    }

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

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

        arrayScore = new int[n];
        arrayTime = new int[n];

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

        T.DFS(0,0, 0);

        System.out.println(scoreResult);
    }
}

 

import java.util.*;

public class Main {

	static int answer = Integer.MIN_VALUE, n, m;
	
	boolean flag=false;
	// ps - ๊ฐ ๋ฌธ์ œ์˜ ์ ์ˆ˜, pt - ๊ฐ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„
	public void DFS(int L, int sum, int time, int[] ps, int[] pt){
		// ์ œํ•œ์‹œ๊ฐ„์„ ๋„˜์—ˆ์„ ๊ฒฝ์šฐ
		if(time>m){
			return;
		}
		if(L==n){
			answer = Math.max(answer, sum);
		}else{
			// ๋ถ€๋ถ„์ง‘ํ•ฉ ์“ฐ๊ฒ ๋‹ค.
			DFS(L+1, sum+ps[L], time+pt[L], ps, pt);
			// ๋ถ€๋ถ„์ง‘ํ•ฉ ์“ฐ์ง€ ์•Š๊ฒ ๋‹ค.
			DFS(L+1, sum, time, ps, pt);
		}
		
	}
	
    public static void main(String[] args) {
        
		Main main = new Main();
		Scanner kb = new Scanner(System.in);
		
		// ๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜
		n = kb.nextInt();
		// ์ œํ•œ ์‹œ๊ฐ„
		m = kb.nextInt();
		
		// ๊ฐ ๋ฌธ์ œ์˜ ์ ์ˆ˜
		int[] a = new int[n];
		// ๊ฐ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„
		int[] b = new int[n];
		
		for(int i=0; i<n; i++){
			a[i] = kb.nextInt();
			b[i] = kb.nextInt();
		}
		
		main.DFS(0, 0, 0, a, b);
		System.out.println(answer);
	}

}
Comments