[DFS] 5. ๋์ ๊ตํ
<<ํ์ด>>
-๋์ ํ์ด-
์ด ๋ฌธ์ ๋ DFS๋ก ์ฝ๊ฒ ํ ์ ์๋ค. ๋์ ์ข ๋ฅ์ ๊ฐฏ์๋งํผ ๊ณ์ํด์ ๋ํด์ ๊ทธ ๊ฐ์ด ์ต์ข ํ๊ฒ ๊ฐ์ด ๋๋ฉด ๊ทธ ๋ ๊ฐ์ ์ต์๊ฐ ๋น๊ต๋ก ๋ต์ ๋์ถํด๋ธ๋ค. ๋ง์ฝ ๊ทธ ๊ฐ์ด ํ๊ฒ ๊ฐ์ ๋์ด์๋ฒ๋ฆฌ๋ฉด return ํ๊ฒ๋ ํ๋ค.
๊ฒฐ๊ตญ ์ ๋ต์ ๋ง์ท๋ค.
ํ์ง๋ง, ์๊ฐ ์ด๊ณผ๊ฐ ๋ด๋ค ,,
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
class Main {
static int answer;
int min = Integer.MAX_VALUE;
private void DFS(int L, int T, int n, int z, int[] arr) {
if (T > z) return;
if (T == z) {
min = Math.min(min, L);
return;
} else {
for (int i = 0; i < n; i++) {
DFS(L + 1, T + arr[i], n, z, arr);
}
}
answer = min;
}
public static void main(String[] args) throws Exception{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String m = br.readLine();
int[] arr = new int[n]; // ์ฌ๊ธฐ์ new int[n]์ ์ ์จ๋ ๋ฐ stream์ ํตํด ์๋์ผ๋ก ๋ง๋ค์ด ์ค๋ค.
arr = Arrays.asList(m.split(" "))
.stream().mapToInt(Integer::parseInt).toArray();
int z = Integer.parseInt(br.readLine());
T.DFS(0, 0, n, z, arr);
System.out.print(answer);
}
}
๊ทธ๋์ ํธ๋ฆฌ๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ํ๋ ํํ์ด๋ฏ๋ก, ๊ฐ์ฅ ํฐ ๋์ ์ผ๋ก ๋จผ์ ๊ณ์ฐํด์ฃผ๊ธฐ ์ํด์ ์ ๋ ฌ์ ํ ๋ค ๊ฐ์ฅ ํฐ ๊ฐ๋ถํฐ ๋จผ์ ๊ณ์ฐ ๋๋๋ก ๊ณ ์ณค๋ค. ํ์ง๋ง ์ด๊ฒ๋ ์๊ฐ ์ด๊ณผ ใ ใ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
class Main {
static int answer;
int min = Integer.MAX_VALUE;
private void DFS(int L, int T, int n, int z, int[] arr) {
if (T > z) return;
if (T == z) {
min = Math.min(min, L);
return;
} else {
for (int i = n - 1; i >= 0; i--) {
DFS(L + 1, T + arr[i], n, z, arr);
}
}
answer = min;
}
public static void main(String[] args) throws Exception{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String m = br.readLine();
int[] arr = Arrays.asList(m.split(" "))
.stream().mapToInt(Integer::parseInt).toArray();
Arrays.sort(arr);
int z = Integer.parseInt(br.readLine());
T.DFS(0, 0, n, z, arr);
System.out.print(answer);
}
}
๋๋์ฒด ์ด๋ป๊ฒ ํ์ด์ผ ํ ๊น?? ๊ฐ์ฌ๋์ ์์ ์ ๋ค์ด๋ณด์,,
-๊ฐ์ฌ๋ ํ์ด-
ใ ใ ใ ใ ใ ์ ๋ง ๊ฐ๋จํ ๋ฌธ์ ์๋ค. ์๊ฐํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ๊ตฌํ๊ณ ์ ํ๋ ์ต์๊ฐ๋ณด๋ค ๋ ํฐ๊ฐ์ด๋ผ๋ฉด. ๊ตณ์ด ๋ ๋ํด์ ๋ต์ ๋์ถํ ํ์๊ฐ ์๋ค. ์ด์ฐจํผ ์ต์๊ฐ์ ๊ทธ๋๋ก ์ ์ง๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์กฐ๊ฑด์ ํ๋ ๋ ๋ฌ๋ฉด ๋ฐ๋ก ์๊ฐ ์ด๊ณผ๋ผ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค ใ ใ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
class Main {
static int answer = Integer.MAX_VALUE;
private void DFS(int L, int T, int n, int z, Integer[] arr) {
if (T > z || L > answer) return;
if (T == z) {
answer = Math.min(answer, L);
return;
} else {
for (int i = 0; i < n; i++) {
DFS(L + 1, T + arr[i], n, z, arr);
}
}
}
public static void main(String[] args) throws Exception{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String m = br.readLine();
Integer[] arr = Arrays.asList(m.split(" "))
.stream().map(Integer::valueOf)
.toArray(Integer[]::new);
Arrays.sort(arr, Collections.reverseOrder());
int z = Integer.parseInt(br.readLine());
T.DFS(0, 0, n, z, arr);
System.out.print(answer);
}
}
์ด ๋ฐ์ ํ์ด๋ ๊ฐ์ฌ๋์ด ํํธ ์ฃผ์ ๋ง์ ๋ฐ๋ก ์ ์ฉํด์ ์ ๋ต์ ๋ง์ถ ์ฝ๋์ด๋ค.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
class Main {
static int answer = Integer.MAX_VALUE;
private void DFS(int L, int T, int n, int z, int[] arr) {
if (T > z || L > answer) return; // ๋ฐ๋ก ์ด๋ถ๋ถ !!
if (T == z) {
answer = Math.min(answer, L);
return;
} else {
for (int i = n - 1; i >= 0; i--) {
DFS(L + 1, T + arr[i], n, z, arr);
}
}
}
public static void main(String[] args) throws Exception{
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String m = br.readLine();
int[] arr = Arrays.asList(m.split(" "))
.stream().mapToInt(Integer::parseInt).toArray();
Arrays.sort(arr);
int z = Integer.parseInt(br.readLine());
T.DFS(0, 0, n, z, arr);
System.out.print(answer);
}
}
if (T > z || L > answer) return;
๋น๋ก ์ด์ด๋ ์์์ง๋ง ์ด ์์ ๊ฒ ํ๋๋ก ์ธํด ๊ณ์ฐ ์๋์ ํฐ ์ฐจ์ด๋ฅผ ์ค ์ ์๋ค๋ ๊ตํ์ ์ป๊ณ ๊ฐ๋ค.
<<์ถ๊ฐ ๊ณต๋ถ>>
Arrays.sort(arr, Collections.reverseOrder());
์ผ๋ฐ์ ์ผ๋ก ์ค๋ฆ์ฐจ์์ ์งํํ ๋์๋ Arrays.sort(๋ฐฐ์ด) ๋ก ๋ฐ๋ก ๊ตฌํ ์ ์์ง๋ง, ๋ด๋ฆผ์ฐจ์์ธ ๊ฒฝ์ฐ๋ for๋ฌธ์ ๋๋ฆด๋ ๋ฐ๋๋ก ํด์ฃผ๊ฑฐ๋
์์ ๋ฐฉ์๋๋ก Collections์ ๋ด์ฅ ํด๋์ค๋ฅผ ํ์ฉํด์ผ ํ๋ค. ์ด๋ arr๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ ๊ฐ์ฒด๋ก ๋์ด์ผ ํ๋ฏ๋ก int๊ฐ ์๋, wrapper ํด๋์ค๋ก ๋ฐ๊ฟ์ค Integer ํ์ ์ผ๋ก ๋ค์ด๊ฐ์ผ ํ๋ค!
๊ทธ๋์
Integer[] arr = Arrays.asList(m.split(" "))
.stream().map(Integer::valueOf)
.toArray(Integer[]::new);
์ด๋ ๊ฒ ๋ณํ์ ์์ผ์ค๋ค.
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/1002/์ค๋ฒ3] ํฐ๋ (3) | 2024.02.25 |
---|---|
[DFS] 6. ์์ด ๊ตฌํ๊ธฐ (83) | 2024.02.24 |
[๋ฐฑ์ค/1051/์ค๋ฒ3] ์ซ์ ์ ์ฌ๊ฐํ (1) | 2024.02.22 |
[DFS] 3. ์ต๋์ ์ ๊ตฌํ๊ธฐ (1) | 2024.02.22 |
[DFS] 2. ๋ฐ๋์ด ์น์ฐจ (70) | 2024.02.16 |
๋๊ธ