[DFS] 1. ํฉ์ด ๊ฐ์ ๋ถ๋ถ์งํฉ
<<ํ์ด>>
-๋์ ํ์ด-
์ฐ์ ๋์ ํ์ด๋ ํ๋ ธ๋ฐ ใ ใ ใ ๋๋ฆ ์ ํ๋ค๊ณ ์๊ฐํ์ง๋ง, ์๋๋ ์ข์๋ค๊ณ ์๊ฐํ๋ค. ์ด๋ค ๋ถ๋ถ์์ ๋ฌธ์ ๊ฐ ์์ ๊ฑฐ ๊ฐ์๋ฐ, ์๊ฐ ์ ์์ง ์ฒดํฌ๋ฅผ ํ์ง ๋ชปํ๋ค.
import java.util.Scanner;
class Main{
private static int[] arr;
private static int[] ch;
private static int sum;
private static int target;
private String DFS(int v) {
sum += v;
for (int x : arr) {
if (ch[x] != 1) {
target += x;
}
}
if (sum == target) return "YES";
else {
target = 0;
for (int x : arr) {
if (ch[x] != 1) {
ch[x] = 1;
DFS(x);
sum -= x;
ch[x] = 0;
}
}
}
return "NO";
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
arr = new int[n];
ch = new int[11];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
ch[arr[0]] = 1;
System.out.println(T.DFS(arr[0]));
}
}
-๊ฐ์ฌ๋ ํ์ด-
ํฌ ~ ์ด ๋ฌธ์ ๋ ๊ธฐ๊ฐ๋งํ๊ฒ ํธ์ จ๋ค. ๋๋ ์ด๋ฐ ํ์ด๋ ์๊ณ ๋ ์์์ง๋ง, ๋ ์ค๋ฅด์ง ๋ชปํ๋ค.. ใ
์ผ๋จ ์ ์ฒด์ ์ธ ๋งฅ๋ฝ์ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉ ์ ํ๊ฑฐ๋ ์ด๋ ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์งํ์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ return ํ์ ๋ void๋ก ํด์ ์งํ์ ํ๋ค.
์ดํ, ๊ฐ์ด total ๊ฐ์ sum์ ๋นผ๊ฑฐ๋ total์ 2๋ก ๋๋ด์ ๋ ๊ฐ์ด sum๊ณผ ๊ฐ๋ค๋ฉด answer์ "YES" ๋ฅผ ์ถ๋ ฅํ๊ฒ ํ๋ค.
answer๊ฐ "YES"๊ฐ ๋๋ ์๊ฐ ๋ถํฐ๋ ๋ ์ด์ ๊ณ์ฐ์ด ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ flag ๋ฅผ false๋ก ํด๋ ๊ฒ์ true๋ก ๋ฐ๊ฟ์ผ๋ก์จ
๊ณ์ return์ด ๋๋๋ก ํ์ฌ, ๊ณ์ฐ์ ๋๋ด๋๋ก ํ๋ค.
import java.util.Scanner;
class Main {
static String answer = "NO";
static int n, total = 0;
boolean flag = false;
public void DFS(int L, int sum, int[] arr) {
if (flag) return;
if (sum > total / 2) return;
if (L == n) {
if ((total - sum) == sum) {
answer = "YES";
flag = true;
}
}
else {
DFS(L + 1, sum + arr[L], arr);
DFS(L + 1, sum, arr);
}
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
n = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
total += arr[i];
}
T.DFS(0, 0, arr);
System.out.println(answer);
}
}
์ฐธ ์ฝ๋๊ฐ ๋ง์ด ๊น๋ํด์ก๋ค. ์ด๋ป๊ฒ ๋ณด๋ฉด ๊ฐ๋ ์ ์ผ๋ก ์๊ณ ๋ ์์ง๋ง ์์ง ๋ด ๊ฒ์ด ์๋๋ค๋ณด๋ ์ ๋๋ก ํ์ฉ์ ๋ชปํ ๊ฑฐ ๊ฐ๋ค.
์ง๊ธ์ ์ด๋ ์ง๋ง ์ ์ฐจ ๋๊ฒ์ด๋ผ ์๊ฐํ๊ณ , ๋ด ํผ์ ๋ค์ ์ฝ๋ ์์ฑํด์ ํ์ด๋ด์ผ๊ฒ ๋ค!
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DFS] 3. ์ต๋์ ์ ๊ตฌํ๊ธฐ (1) | 2024.02.22 |
---|---|
[DFS] 2. ๋ฐ๋์ด ์น์ฐจ (70) | 2024.02.16 |
[BFS] 14. ๊ทธ๋ํ ์ต๋จ ๊ฑฐ๋ฆฌ (2) | 2024.02.10 |
[DFS] 13. ๊ฒฝ๋กํ์(์ธ์ ๋ฆฌ์คํธ, ArrayList) (2) | 2024.02.10 |
[DFS] 12. ๊ฒฝ๋กํ์ (1) | 2024.02.08 |
๋๊ธ