https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV2b7Yf6ABcBBASw
1. ๋ฌธ์ ์์ฝ
์ ์ N๋ช ์ด ํ์ ์์์ ๋์ด๊ฐ B ์ด์์ผ ๋ ์ต์๊ฐ ๋๋ ๋์ด๋ฅผ ๊ตฌํ๋ ค๊ณ ํ๋ค.
2. ํ์ด
๋ถ๋ถ์งํฉ ๋ฌธ์ ์ด๋ค.
2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ์๋ค.
์ฒซ ๋ฒ์งธ๋
๋ถ๋ถ์งํฉ์ผ๋ก N๋ฒ ๋ค ๋ดค์ ๋ ๊ธฐ์ ์กฐ๊ฑด์์ check() ํจ์๋ก
for๋ฌธ์ผ๋ก ์ ํํ ๋ ์๋ค์ ํ๋ํ๋ ์ฐพ์ ํฉ์ ๊ตฌํด์คฌ๋ค. ๊ทธ๋ฆฌ๊ณ B ์ด์์ผ ๊ฒฝ์ฐ ์ต์๊ฐ์ ๊ฐฑ์ ํด์คฌ๋ค.
๊ทผ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ๋ถํ์ํ ๋ฐ๋ณต์ด ์ผ์ด๋๋ค.
๊ทธ๋์ ์์ ํ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์
์ ํํ ๋ ์๋ค๋ง์ ํฉ์ ํ๋ผ๋ฏธํฐ๋ก ๋ณด๋ด์ ๋ถ๋ถ์งํฉ ํจ์ ํธ์ถํ ๋๋ง๋ค ์ต์๊ฐ์ ๊ฐฑ์ ์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
์ฒซ ๋ฒ์งธ
๋ ๋ฒ์งธ
๋ ๋ฒ์งธ๊ฐ ๋ ๋น ๋ฅด๋ค.
3. ์ฝ๋
์ฒซ ๋ฒ์ฌ ๋ฐฉ๋ฒ
import java.io.*;
import java.util.*;
public class Solution {
static int N, B, ans;
static int[] height;
static boolean[] isSelected;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc<=T; tc++) {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
height = new int[N];
isSelected = new boolean[N];
st = new StringTokenizer(br.readLine());
for (int i=0; i<N; i++) {
height[i] = Integer.parseInt(st.nextToken());
} //์
๋ ฅ ๋
ans = Integer.MAX_VALUE;
subset(0);
System.out.println("#"+tc+" "+ans);
}
}
static void subset(int cnt) {
if (cnt == N) {
check();
return;
}
isSelected[cnt] = true;
subset(cnt+1);
isSelected[cnt] = false;
subset(cnt+1);
}
static void check() {
int sum = 0;
for (int i=0; i<N; i++) {
if (isSelected[i] == true) {
sum += height[i];
}
}
if (sum >= B) {
ans = Math.min(ans, sum-B);
}
}
}
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ
package a22_11_12;
import java.io.*;
import java.util.*;
public class SW_1486_์ฅํ์ด์๋์์ ๋ฐ {
static int N, B, ans;
static int[] height;
static boolean[] isSelected;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc<=T; tc++) {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
B = Integer.parseInt(st.nextToken());
height = new int[N];
isSelected = new boolean[N];
st = new StringTokenizer(br.readLine());
for (int i=0; i<N; i++) {
height[i] = Integer.parseInt(st.nextToken());
} //์
๋ ฅ ๋
ans = Integer.MAX_VALUE;
subset(0, 0);
System.out.println("#"+tc+" "+ans);
}
}
static void subset(int cnt, int sum) {
if (sum>=B) ans = Math.min(ans, sum-B);
if (cnt == N) {
return;
}
isSelected[cnt] = true;
subset(cnt+1, sum + height[cnt]);
isSelected[cnt] = false;
subset(cnt+1, sum);
}
}
4. ์ฌ๋ด
๋ถ๋ถ์งํฉ์ ์ ์ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค
์ํ์ ์ด๋ฐ ๋ฌธ์ ๋ง ๋์์ผ๋ฉด ์ผ๋ง๋ ์ข์๊น
'Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 8382. ๋ฐฉํฅ ์ ํ - Java (0) | 2022.11.14 |
---|---|
[SWEA] 1824. ํ์ง์ด์ ํ๋ก๊ทธ๋จ ๊ฒ์ฆ - Java (0) | 2022.11.14 |
[SWEA] 1868. ํํํํ ์ง๋ขฐ์ฐพ๊ธฐ - Java (0) | 2022.11.13 |
[SWEA] 1949. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ๋ฑ์ฐ๋ก ์กฐ์ฑ - Java (1) | 2022.11.09 |
[SWEA] 1227. [S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 7์ผ์ฐจ - ๋ฏธ๋ก2 - Java (0) | 2022.10.27 |