Algorithm
[BOJ_1182]๋ถ๋ถ์์ด์ ํฉ (์ค๋ฒ 2) - JAVA
์ด์๋ฐ
2023. 11. 30. 14:29
๐พ ์๊ณ ๋ฆฌ์ฆ
- ์กฐํฉ ํน์ ๋ถ๋ถ์งํฉ
- ๋ฐฑํธ๋ํน
๐พ ์๊ฐ ํฌ์ธํธ
- ๋ถ๋ถ์์ด์ด๋ผ๊ณ ๋ฌด์กฐ๊ฑด ์ฐ์๋ ์์ด์ด ์๋๋ค.
- ์์ด ๋ด์์ 1๊ฐ, 2๊ฐ, .. N๊ฐ๋ฅผ ์ ํํ๋ ์กฐํฉ๋ก ์ ํ์ฉํ์.
- ์กฐํฉ์ด ์์ฑ๋ ๋๋ง๋ค ํฉ์ ๋น๊ตํด์ ๊ณ์ํด์ฃผ์.
๐พ ์์ค์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
static int N;
static int S;
static int[] arr;
static boolean[] visited;
static int cnt;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); // N๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด
S = Integer.parseInt(st.nextToken()); // ๋ถ๋ถ์์ด์ ํฉ์ด s
arr = new int[N];
visited = new boolean[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
} // ์
๋ ฅ์
// ํฉ์ด s๊ฐ ๋๋ ๋ถ๋ถ์์ด์ ๊ฐ์ ๊ตฌํ๊ธฐ!
// i๊ฐ ๋ฝ์!
for (int i = 1; i <= N; i++) {
combination(arr, visited, 0, i);
}
System.out.println(cnt);
}
private static void combination(int[] arr, boolean[] visited, int start, int r) {
if (r == 0) {
sum(arr, visited);
return;
} else {
for (int i = start; i < arr.length; i++) {
visited[i] = true;
combination(arr, visited, i + 1, r - 1);
visited[i] = false;
}
}
}
// ๋ถ๋ถ์์ด์ ํฉ ๊ตฌํ๊ธฐ
private static void sum(int[] arr, boolean[] visited) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
if (visited[i]) {
sum = sum + arr[i];
}
}
if(sum == S) {
cnt++;
}
}
}
๐ต๐ซ ๊ณต๋ถํด์ผ ํ ์
- ์กฐํฉ๋ก ์ ๋ํด ๊น์ด์๊ฒ ๊ณต๋ถํด์ผํ ๊ฒ ๊ฐ๋ค. ์กฐํฉ๋ก ์๊ณ ๋ฆฌ์ฆ ์์ฒด๋ฅผ ์ธ์๋ฒ๋ฆฌ๋ค ๋ณด๋, ์ดํดํด์ ํ๊ธฐ๋ณด๋ค๋ ์๊ธฐํด์ ํธ๋ ๋๋์ด ๊ฐํ๋ค. ๊ทธ๋์ ํ๋ฐ์ฑ์ด ๊ฐํ๋ค ใ .ใ ๐๐