๋ฌธ์
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWT-lPB6dHUDFAVT
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
๋ฌธ์ ์ดํด
์ ํ๋ ์นผ๋ก๋ฆฌ ๋ด์์ ๋ง ์ ์๋ฅผ ์ต๋ํํ๋ ์ฌ๋ฃ์ ์กฐํฉ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
๋ง ์ ์์ ์นผ๋ก๋ฆฌ๋ฅผ ๊ฐ์ง N๊ฐ์ ์ฌ๋ฃ๊ฐ ์๋ค.
์ด ์ค์์ ์ผ๋ถ๋ฅผ ์ ํํด์ ์ด ์นผ๋ก๋ฆฌ๊ฐ L ์ดํ์ธ ์กฐํฉ ์ค์์ ๋ง ์ ์์ ํฉ์ด ์ต๋๊ฐ ๋๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ๋ค.
๋ฌธ์ ํ์ด
๐ ์ฌ๋ฃ ์ ๋ณด ์ ์ฅ: ๊ฐ ์ฌ๋ฃ๋ ๋ง ์ ์์ ์นผ๋ก๋ฆฌ๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ Pair ํด๋์ค๋ก ๋ง๋ค์ด List์ ์ ์ฅํ๋ค.
๐ก ๋ฐฑํธ๋ํน์ ์ด์ฉํ ์กฐํฉ ํ์
: ๊ฐ์ง์น๊ธฐ(pruning)๋ฅผ ํตํด ์นผ๋ก๋ฆฌ๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ ์กฐ๊ธฐ ์ข ๋ฃํ์ฌ ๋ถํ์ํ ํ์์ ์ค์ธ๋ค.
- ํ์ฌ ์ธ๋ฑ์ค idx, ๋์ ๋ง ์ ์ tasteSum, ๋์ ์นผ๋ก๋ฆฌ calSum์ ์ธ์๋ก ์ฌ๊ท ํธ์ถํ๋ค.
- ํ์ฌ ์ฌ๋ฃ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ์ ์ ํํ์ง ์๋ ๊ฒฝ์ฐ๋ก ๋๋์ด ์ฌ๊ท ํธ์ถํ๋ค.
- ๋์ ์นผ๋ก๋ฆฌ๊ฐ ์ ํ ์นผ๋ก๋ฆฌ l์ ์ด๊ณผํ๋ฉด ํด๋น ์กฐํฉ์ ๋ฒ๋ฆฐ๋ค.
- ๋ชจ๋ ์ฌ๋ฃ๋ฅผ ํ์ํ๋ค๋ฉด (idx == list.size()), ํ์ฌ ์กฐํฉ์ ๋ง ์ ์๋ฅผ ์ต๋๊ฐ์ผ๋ก ๊ฐฑ์ ํ๋ค.
์ฝ๋
import java.io.*;
import java.util.*;
public class Solution {
static class Pair {
int taste;
int calories;
Pair(int taste, int calories) {
this.taste = taste;
this.calories = calories;
}
}
static List<Pair> list = new ArrayList<>();
static int l = 0;
static int ans = 0;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
ans = 0;
list.clear();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
l = Integer.parseInt(st.nextToken());
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int taste = Integer.parseInt(st.nextToken());
int cal = Integer.parseInt(st.nextToken());
list.add(new Pair(taste, cal));
}
backtracking(0, 0, 0);
System.out.println("#" + tc + " " + ans);
}
}
static void backtracking(int idx, int tasteSum, int calSum) {
if (calSum > l) return;
if (idx == list.size()) {
ans = Math.max(ans, tasteSum);
return;
}
backtracking(idx + 1, tasteSum + list.get(idx).taste, calSum + list.get(idx).calories);
backtracking(idx + 1, tasteSum, calSum);
}
}
'๐ญ Problem Solving > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [BOJ][Java] 14503. ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2025.09.03 |
|---|---|
| [SWEA][Java] 3421. ์์ ๋ฒ๊ฑฐ ์ฅ์ธ (4) | 2025.08.29 |
| [BOJ][Java] 1946. ์ ์ ์ฌ์ (1) | 2025.08.26 |
| [BOJ][Java] 2492. ๋ณด์ (0) | 2025.08.20 |
| [BOJ][Java] 16926. ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 1 (4) | 2025.08.07 |