๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/14225)
< ๋ถ๋ถ์์ด์ ํฉ >
๋ฌธ์ ํ์ด
๋ชจ๋ ์กฐํฉ์ ํตํด ๋ถ๋ถ ์์ด์ ํฉ์ผ๋ก ๋์ฌ ์ ์๋ ๊ฐ์ฅ ์์ ์์ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class _14225_ { // ๋ถ๋ถ์์ด์ ํฉ
static int arr[], answer[], n;
static boolean result[];
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n = Integer.parseInt(bf.readLine());
arr = new int[n];
result = new boolean[2000001];
st = new StringTokenizer(bf.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
result[arr[i]] = true;
}
Arrays.sort(arr);
for (int i = 2; i <= n; i++) {
answer = new int[i];
search(i, 0, 0);
}
for (int i = 1; i < result.length; i++) {
if (!result[i]) {
System.out.println(i);
break;
}
}
}
private static void search(int max, int start, int idx) {
if (idx == max) {
int sum = 0;
for (int i = 0; i < idx; i++) {
sum += answer[i];
}
result[sum] = true;
return;
}
for (int i = start; i < n; i++) {
answer[idx] = arr[i];
search(max, i + 1, idx + 1);
}
}
}
๋ณ์)
n : ์์ด์ ํฌ๊ธฐ
arr : ์์ด S
result : ๋ถ๋ถ ์์ด์ ํฉ์ผ๋ก ๋์ฌ ์ ์๋ ์์ฐ์
answer : ๋ถ๋ถ ์์ด
์์ด์ ํฌ๊ธฐ๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค. ์์ด์ ํฌ๊ธฐ๋งํผ ์์ด์ ์ ๋ ฅ๋ฐ๋๋ค. ์ ๋ ฅ๋ฐ์ ์์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ํ ๊ตฌํ ์ ์๋ ๋ชจ๋ ์กฐํฉ์ ๊ตฌํ๋ค. ์กฐํฉ์ ํตํด ๋ถ๋ถ ์์ด์ ํฉ์ผ๋ก ๋์ฌ ์ ์๋ ๊ฐ์ฅ ์์ ์์ฐ์๋ฅผ ์ฐพ์ ์ถ๋ ฅํ๋ค.
search (์กฐํฉ ๊ฐ์, ์์ ์ธ๋ฑ์ค, ์ธ๋ฑ์ค )
์์ด์ ํ์ํ๋ฉด์ ์กฐํฉ์ ๊ตฌํ๋ค. ์ธ๋ฑ์ค๊ฐ ์กฐํฉ ๊ฐ์์ ์ผ์นํ๋ค๋ฉด ์กฐํฉ์ ๋ค ๊ตฌํ ๊ฒ์ด๋ฏ๋ก ํ์ฌ ๊ตฌํ ๋ถ๋ถ ์์ด์ ํฉ์ ๊ตฌํ๋ค. ํฉ์ ๊ตฌํ ํ result ๋ฐฐ์ด์์ ๊ทธ ๊ฐ์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ ํ ์ข ๋ฃํ๋ค.

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 6986_์ ์ฌํ๊ท (1) | 2024.02.14 |
---|---|
[Baekjoon] 2312_์ ๋ณต์ํ๊ธฐ (2) | 2024.02.13 |
[Baekjoon] 10451_์์ด ์ฌ์ดํด (0) | 2024.02.09 |
[Baekjoon] 3758_KCPC (0) | 2024.02.08 |
[Baekjoon] 3085_์ฌํ ๊ฒ์ (0) | 2024.02.07 |