알고리즘(백준 등) 공부

SWEA 24396. 공과 상자

posite 2026. 4. 15. 13:52

검은 공과 흰 공이 색에 맞는 상자가 각각의 공의 갯수 만큼 있을 때, 검은 공을 검은 상자에 넣을 때의 점수, 흰공을 흰 상자에 넣을 때의 점수, 다른 색상의 상자에 담았을 때의 점수가 주어질 때 최고점을 구하는 문제이다.

 

다른 색상의 상자에 담았을 때의 점수가 다른 점수보다 낮으면 기본 점수인 같은 색의 상자에 공을 넣는 경우가 가장 크고 반대라면 최대한 많이 다른 상자에 넣는 경우 최대한 많은 공을 색이 다른 상자에 넣었을 때 점수가 가장 크며, 이를 비교해서 큰 값이 최고점이다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        while(T-- > 0) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int b = Integer.parseInt(st.nextToken()), w = Integer.parseInt(st.nextToken());
            int x = Integer.parseInt(st.nextToken()), y = Integer.parseInt(st.nextToken()), z = Integer.parseInt(st.nextToken());
            int sum = b*x + w*y;
            int minAmount = Math.min(b,  w);
            sum = Math.max(sum, z*2*minAmount + x*(b-minAmount) + y * (w-minAmount));
            sb.append(sum).append('\n');
        }
        br.close();
        System.out.print(sb);
    }
}