문제 출처: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW8Wj7cqbY0DFAXN&categoryId=AW8Wj7cqbY0DFAXN&categoryType=CODE&problemTitle=9229&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
private static int maxWeight;
private static int result;
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(reader.readLine());
int problemNum = 1;
while (T-- > 0) {
StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
int N = Integer.parseInt(tokenizer.nextToken()); // 과자 개수
maxWeight = Integer.parseInt(tokenizer.nextToken()); // 무게 제한
result = -1; // 기본값으로 초기화
tokenizer = new StringTokenizer(reader.readLine());
int[] snacks = new int[N];
for (int i = 0; i < N; i++) {
snacks[i] = Integer.parseInt(tokenizer.nextToken());
}
combination(snacks, 0, 0, 0);
sb.append("#").append(problemNum++).append(" ");
sb.append(result).append("\n");
}
System.out.println(sb);
}
private static void combination(int[] snacks, int weight, int count, int start) {
if (count == 2) {
if (weight <= maxWeight) result = Math.max(result, weight);
return;
}
for (int i = start; i < snacks.length; i++) {
weight += snacks[i];
combination(snacks, weight, count + 1, i + 1);
weight -= snacks[i];
}
}
}
- 조합을 통해 간단히 해결할 수 있는 문제였다.
- 무게가 "초과"인지 "이상"인지 판단하는 것과 무조건 "2개"로 고정된다는 사실을 잘 파악해야 했다.