SWEA - 9229 : 한빈이와 Spot Mart [자바]

HungAh.log·2021년 8월 12일
0

SWEA 문제풀이 - 자바

목록 보기
15/22
import java.io.*;
import java.util.*;

class Solution {
	// 과자 두 봉지를 사서 양 손에 하나씩 들고 감
	// 스팟마트에는 N개의 과자봉지, 각 a_i그램 무게
	// 최대한 양이 많은 과자를 고르고 싶었으나
	// 두 봉지 무게 <= M 까지만 괜찮음
	static int max, gram;
	static int[] numbers;
	static List<Integer> snack;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine()); // 테스트케이스
		StringBuilder sb = new StringBuilder();

		for (int test_case = 1; test_case <= T; test_case++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int N = Integer.parseInt(st.nextToken()); // 과자 개수 2 <= N <= 1000
			gram = Integer.parseInt(st.nextToken()); // 무게 합 제한 1 <= gram <= 1000000
			snack = new ArrayList<>();

			st = new StringTokenizer(br.readLine());
			for (int i = 0; i < N; i++) {
				snack.add(Integer.parseInt(st.nextToken()));
			}
			max = Integer.MIN_VALUE;
			numbers = new int[2];
			combination(0, 0);
			max = (max < 0) ? -1 : max;
			sb.append("#").append(test_case).append(" ").append(max).append("\n");
		}
		br.close();
		System.out.println(sb);
	}

	public static void combination(int cnt, int start) {
		if (cnt == 2) { // 과자 두 개 고르면
			System.out.println(Arrays.toString(numbers));
			int sum = 0;
			for (int i = 0; i < numbers.length; i++) {
				sum += numbers[i]; // 과자무게 합 구하기
			}
			if (max < sum && sum <= gram) { // 과자무게가 제한에 들어오고, sum이 현재 최대값보다 크면
				max = sum;
			}
			return;
		}
		for (int i = start; i < snack.size(); i++) {
			numbers[cnt] = snack.get(i); // 과자 하나 고르고
			combination(cnt + 1, i + 1); // 그 다음부터 고르기
		}
	}
}
profile
👩🏻‍💻

0개의 댓글