Java

[백준 4716] 풍선 (JAVA)

iheeeee6-6 2023. 6. 14. 17:22
728x90

https://www.acmicpc.net/problem/4716

 

4716번: 풍선

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 팀의 수 N(1 ≤ N ≤ 1,000)과 방 A와 B에 보관되어있는 풍선의 수 A, B가 주어진다. (0 ≤ A, B ≤ 10,000)  다음 N개

www.acmicpc.net

 

 

각 팀의 A와 B 거리의 차이를 구하고,

그 차이가 큰 순서대로 정렬하여 

해당 팀의 짧은 거리인 곳과 먼저 계산되도록 한다!

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

public class Main {

	static class Node implements Comparable<Node> {
		int num, adis, bdis;

		Node(int num, int adis, int bdis) {
			this.num = num;
			this.adis = adis;
			this.bdis = bdis;
		}

		@Override
		public int compareTo(Node nd) {
			return Math.abs(nd.adis - nd.bdis) - Math.abs(this.adis - this.bdis);
		}
	}

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		while (true) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int n = Integer.parseInt(st.nextToken());
			int an = Integer.parseInt(st.nextToken());
			int bn = Integer.parseInt(st.nextToken());
			if (an == 0 && bn == 0 && n == 0)
				break;
			Node[] arr = new Node[n];
			for (int i = 0; i < n; i++) {
				st = new StringTokenizer(br.readLine());
				arr[i] = new Node(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()),
						Integer.parseInt(st.nextToken()));

			}

			Arrays.sort(arr);
			int result = 0;
			for (int i = 0; i < n; i++) {
				if (arr[i].adis < arr[i].bdis) {
					if (an >= arr[i].num) {
						an -= arr[i].num;
						result += arr[i].adis * arr[i].num;
					} else {
						result += arr[i].adis * an;
						result += arr[i].bdis * (arr[i].num - an);
						bn -= (arr[i].num - an);
						an = 0;
					}
				} else {
					if (bn >= arr[i].num) {
						bn -= arr[i].num;
						result += arr[i].bdis * arr[i].num;
					} else {
						result += arr[i].bdis * bn;
						result += arr[i].adis * (arr[i].num - bn);
						an -= (arr[i].num - bn);
						bn = 0;
					}

				}
			}

			System.out.println(result);
		}
	}

}