본문 바로가기

Algorithm/Inflearn

[Inflearn] 자바 알고리즘 문제풀이 #08-03 3. 최대점수 구하기(DFS)

문제

설명

이번 정보올림피아드대회에서 좋은 성적을 내기 위하여 현수는 선생님이 주신 N개의 문제를 풀려고 합니다.

각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 됩니다.

제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 합니다.

(해당문제는 해당시간이 걸리면 푸는 걸로 간주한다, 한 유형당 한개만 풀 수 있습니다.)

 

입력 

첫 번째 줄에 문제의 개수N(1<=N<=20)과 제한 시간 M(10<=M<=300)이 주어집니다.

두 번째 줄부터 N줄에 걸쳐 문제를 풀었을 때의 점수와 푸는데 걸리는 시간이 주어집니다.

 

출력 

첫 번째 줄에 제한 시간안에 얻을 수 있는 최대 점수를 출력합니다.

예시 입력 1 

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

예시 출력 1

41

 

 

 

내 풀이 = 선생님 풀이
import java.util.Scanner;

public class Main8_3 {
    static int n, m, answer=Integer.MIN_VALUE;
    public void DFS(int L, int p_sum, int t_sum, int[] point, int[] time) {
        if(t_sum>m) return;
        if(L==n){
            answer = Math.max(p_sum, answer);
        }
        else {
            DFS(L+1, p_sum+point[L], t_sum+time[L], point, time);
            DFS(L+1, p_sum, t_sum, point, time);
        }
    }

    public static void main(String[] args) {
        Main8_3 T = new Main8_3();
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt(); //문제의 개수
        m = sc.nextInt(); //제한 시간
        int[] point = new int[n];
        int[] time = new int[n];
        for (int i = 0; i < n; i++) {
            point[i] = sc.nextInt();
            time[i] = sc.nextInt();
        }
        T.DFS(0, 0, 0, point, time);
        System.out.println(answer);
    }
}

이럴 때가 기분 제일 조치,,,,❤️ 나는 쌤과 알고리즘이 같을 때 희열을 느껴,,,,, 차근차근 잘 공부하고 있는 느낌ㅎㅎ

문제도 5분컷으로 풀어버렸구~~ 기분 최고~!~!  다음 문제, 어려운 문제 다 드루와.

 

 

 

결과