๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2961
2961๋ฒ: ๋์์ด๊ฐ ๋ง๋ ๋ง์๋ ์์
์ฒซ์งธ ์ค์ ์ฌ๋ฃ์ ๊ฐ์ N(1 ≤ N ≤ 10)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ ์ค์๋ ๊ทธ ์ฌ๋ฃ์ ์ ๋ง๊ณผ ์ด๋ง์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ๋ชจ๋ ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํด์ ์๋ฆฌ๋ฅผ ๋ง๋ค์์ ๋, ๊ทธ ์๋ฆฌ์ ์ ๋ง๊ณผ ์ด๋ง์
www.acmicpc.net
โธ ๋ฌธ์
๋์์ด๋ ์งํ๊ตฌ๋ฆฌ ์๋ฆฌ์ฌ๋ก ๋ช ์ฑ์ ๋ ๋ ธ์๋ค. ์ด๋ฒ์๋ ์ด์ ์ ์์๋ ์๋ก์ด ์๋ฆฌ์ ๋์ ์ ํด๋ณด๋ ค๊ณ ํ๋ค.
์ง๊ธ ๋์์ด์ ์์๋ ์ฌ๋ฃ๊ฐ N๊ฐ ์๋ค. ๋์์ด๋ ๊ฐ ์ฌ๋ฃ์ ์ ๋ง S์ ์ด๋ง B๋ฅผ ์๊ณ ์๋ค. ์ฌ๋ฌ ์ฌ๋ฃ๋ฅผ ์ด์ฉํด์ ์๋ฆฌํ ๋, ๊ทธ ์์์ ์ ๋ง์ ์ฌ์ฉํ ์ฌ๋ฃ์ ์ ๋ง์ ๊ณฑ์ด๊ณ , ์ด๋ง์ ํฉ์ด๋ค.
์๊ฑฐ๋ ์ด ์์์ ์ข์ํ๋ ์ฌ๋์ ๋ง์ง ์๋ค. ๋์์ด๋ ์ฌ๋ฃ๋ฅผ ์ ์ ํ ์์ด์ ์๋ฆฌ์ ์ ๋ง๊ณผ ์ด๋ง์ ์ฐจ์ด๋ฅผ ์๊ฒ ๋ง๋ค๋ ค๊ณ ํ๋ค. ๋, ๋ฌผ์ ์๋ฆฌ๋ผ๊ณ ํ ์๋ ์๊ธฐ ๋๋ฌธ์, ์ฌ๋ฃ๋ ์ ์ด๋ ํ๋ ์ฌ์ฉํด์ผ ํ๋ค.
์ฌ๋ฃ์ ์ ๋ง๊ณผ ์ด๋ง์ด ์ฃผ์ด์ก์ ๋, ์ ๋ง๊ณผ ์ด๋ง์ ์ฐจ์ด๊ฐ ๊ฐ์ฅ ์์ ์๋ฆฌ๋ฅผ ๋ง๋๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
โธ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ๋ฃ์ ๊ฐ์ N(1 ≤ N ≤ 10)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ ์ค์๋ ๊ทธ ์ฌ๋ฃ์ ์ ๋ง๊ณผ ์ด๋ง์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ๋ชจ๋ ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํด์ ์๋ฆฌ๋ฅผ ๋ง๋ค์์ ๋, ๊ทธ ์๋ฆฌ์ ์ ๋ง๊ณผ ์ด๋ง์ ๋ชจ๋ 1,000,000,000๋ณด๋ค ์์ ์์ ์ ์์ด๋ค.
โธ ์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ ๋ง๊ณผ ์ด๋ง์ ์ฐจ์ด๊ฐ ๊ฐ์ฅ ์์ ์๋ฆฌ์ ์ฐจ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ์ค๋ฒ 2
- ๐ ๋ฌธ์ ์ ํ : ๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ, ๋นํธ๋ง์คํน, ๋ฐฑํธ๋ํน
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
- ๋ฐฑํธ๋ํน์ ์ด์ฉํ ๋ถ๋ถ์งํฉ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- ๋ชจ๋ ์ฌ๋ฃ์ ๋ถ๋ถ์งํฉ์ ๊ตฌํ ๋ค, ์ฌ๋ฃ๋ฅผ ํ๋๋ ์ฌ์ฉํ์ง ์์์ ๋๋ฅผ ์ ์ธํ ์ ๋ง์ ๊ณฑ๊ณผ ์ด๋ง์ ํฉ์ ์ฐจ์ด ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
๐ ๋ถ๋ถ์งํฉ์ด๋(Subset) ?
- ํ ์งํฉ์ ์์๋ค๋ก๋ง ๊ตฌ์ฑํ ์งํฉ์ ๋งํ๋ค.
- ์งํฉ์ ์์๊ฐ ์ด n๊ฐ์ผ ๋, ๊ณต์งํฉ์ ํฌํจํ ๋ถ๋ถ์งํฉ์ ๊ฐ์๋ 2^n๊ฐ๋ค.
- ์ฆ, ๊ฐ๊ฐ์ ์์๋ค์ ๋ถ๋ถ์งํฉ์ ํฌํจ์ํค๊ฑฐ๋ ํฌํจํ์ง ์๋ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ์์์ ์ ์ฉํ ๊ฒ์ ๊ฒฝ์ฐ์ ์์ ๊ฐ๋ค.
- ์ฌ๊ท๋ฅผ ์ด์ฉํ์ฌ ๋ถ๋ถ์งํฉ์ ๊ตฌํํ ๋๋
- ์๋์ ๊ฐ์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํด ๋ชจ๋ ํ์ธํ ํ ํ์ฌ ์ธ๋ฑ์ค๊ฐ n์ด ๋์์ ๋ ์ถ๋ ฅํ๋ค.
- ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ
- ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ํฌํจํ์ง ์๋ ๊ฒฝ์ฐ
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 11632 KB
์๊ฐ : 76 ms
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int n ;
static int[][] taste;
static boolean[] checked;
static int ans = Integer.MAX_VALUE; // ์ ๋ง๊ณผ ์ด๋ง์ ์ต์๊ฐ
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
n = Integer.parseInt(br.readLine()); // ์ฌ๋ฃ์ ๊ฐ์
taste = new int[n][2]; // ์ ๋ง๊ณผ ์ด๋ง์ ์ ์ฅ ํ ๋ฐฐ์ด
checked = new boolean[n]; // ์ฌ์ฉํ ์ ๋ง๊ณผ ์ด๋ง์ ์ฒดํฌ ํ ๋ฐฉ๋ฌธ๋ฐฐ์ด
// ์ ๋ง ์ด๋ง ์
๋ ฅ
StringTokenizer st;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
taste[i][0] = Integer.parseInt(st.nextToken());
taste[i][1] = Integer.parseInt(st.nextToken());
}
// ์ธ๋ฑ์ค, ์ฌ์ฉํ ์ฌ๋ฃ์ ๊ฐ์, ์ ๋ง(*), ์ด๋ง(+)
dfs(0, 0, 1, 0);
bw.append(ans + "\n");
bw.flush();
bw.close();
br.close();
}
private static void dfs(int idx, int material, int mulSour, int sumBitter) {
if (idx == n) { // ๋ถ๋ถ์งํฉ์ ์์ฑํ๋ค๋ฉด
if (material != 0) { // ์ฌ๋ฃ๋ ์ ์ด๋ ํ๋ ์ฌ์ฉํด์ผ ํจ
ans = Math.min(ans, Math.abs(mulSour-sumBitter));
}
return;
}
// ๋ถ๋ถ์งํฉ ๋ง๋ค๊ธฐ
// ํ์ฌ ์ธ๋ฑ์ค ํฌํจ
checked[idx] = true;
dfs(idx+1, material+1, mulSour*taste[idx][0], sumBitter+taste[idx][1]);
// ํ์ฌ ์ธ๋ฑ์ค ํฌํจ ์ํจ
checked[idx] = false;
dfs(idx+1, material, mulSour, sumBitter);
}
}
๐ ํจ๊ป ํ์ด๋ณด๋ฉด ์ข์ ๋ฐฑ์ค ๋ฌธ์
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_11279] ์ต๋ ํ (0) | 2023.11.13 |
---|---|
[Boj_11286] ์ ๋๊ฐ ํ (0) | 2023.11.13 |
[Boj_1927] ์ต์ ํ (0) | 2023.11.13 |
[Boj_9251] LCS (1) | 2023.11.10 |
[Boj_2167] 2์ฐจ์ ๋ฐฐ์ด์ ํฉ (1) | 2023.11.04 |