[DFS] 3. ์ต๋์ ์ ๊ตฌํ๊ธฐ
<<ํ์ด>>
-๋์ ํ์ด-
์ด๋ฒ DFS๋ ๋ง์ท๋ค !! ใ ใ ๊ณ์ํ๋ค๋ณด๋๊น ์ด๋ค ์๋ฆฌ๋ก ๋์๊ฐ๋์ง ํ์ ์ด ๋๊ณ ์กฐ๊ธ ๋ ์์ํ๊ฒ ์ ๊ทผํ ์ ์์๋ค.
์ ์ฒด์ ์ธ ํ๋ฆ
์ ๊ทผ ๋ฐฉ์์ DFS์ด๊ณ , ์ด ์ญ์ ๋ํ๋ ๋นผ๋ ๋ ๊ฐ์ง๋ก ์ต์ข ๊ฐ 2^n ์ ํํ๋ก ์งํํ๋ ๊ฒ์ด๋ค.
์ฐ์ ์ ๋ ธ๋๋ฅผ ์ฐ์ฐํ ๊ฐ์ผ๋ก ์๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ํ๊ณ ๋นผ๋ ๊ฒ์ ๊ฐ์ ์ผ๋ก ์ฌ๊ธฐ๊ณ ์ ๊ทผ์ ํ๋ค.
๊ทธ๋ ๊ฒ ํด์ ์๊ฐ์ด ์ค๋ฒ๊ฐ ๋๋ฉด return ์์ผฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ฐฐ์ด์ ํ ๊ฐฏ์๋งํผ ๋๋ฉด ์ต์ข ์ ์ผ๋ก Math.max๋ก
๋น๊ตํ์ฌ answer๋ฅผ ๊ฐฑ์ ํ๋ค.
import java.util.Scanner;
class Main {
static int answer;
private void DFS(int L, int a, int m, int total, int[][] arr) {
if (a > m) return;
if (L == arr.length - 1) {
answer = Math.max(answer, total);
return;
} else {
L++;
DFS(L, a + arr[L][1], m, total + arr[L][0], arr);
DFS(L, a , m, total, arr);
}
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int L = 0;
int[][] arr = new int[n + 1][2];
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < 2; j++) {
arr[i][j] = in.nextInt();
}
}
T.DFS(L, arr[0][0], m, 0, arr);
System.out.println(answer);
}
}
-๊ฐ์ฌ๋ ํ์ด-
import java.util.Scanner;
class Main {
static int answer=Integer.MIN_VALUE, n, m;
private 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 T = new Main();
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
int[] a = new int[n];
int[] b = new int[m];
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
b[i] = in.nextInt();
}
T.DFS(0, 0, 0, a, b);
System.out.println(answer);
}
}
์ญ์๋ ๊ฐ์ฌ๋์ ๋๋ ํ์ด ๋ฐฉ์์ ๊ฐ์ง๋ง ํจ์ฌ ๋ ์ ์ ๋ฆฌํด์ ์์ฑํ๋ค ใ ใ
๋๋ 2์ฐจ์๋ฐฐ์ด์ ์๊ฐํ์ง๋ง ์ด์ฐจํผ ํน์ ์ธ๋ฑ์ค์ ๋ค์ด๊ฐ์ผ ํ ๊ฐ๋ค์ด ๊ณ ์ ๋์ด ์๋ค๋ฉด ๊ทธ๋ฅ
๋ฐฐ์ด ๋ ๊ฐ๋ฅผ ๋ง๋ค์ด์ค์ ์์์ ๋ง๊ฒ ๋ฃ์ด์ฃผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
๋๋จธ์ง ๋ ผ๋ฆฌ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋์ผํ๋ค.
*L++๊ณผ L + 1 ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์๋ ์์ง๋ง, L์์ฒด๊ฐ ์๋ก ๊ฐฑ์ ๋๋ ๊ฒ์ L++๋ง ๊ฐ๋ฅํ๊ณ L + 1์ ๋ค์ L = L + 1์ ํด์ผํ๋ค.