728x90
https://www.acmicpc.net/problem/4716
각 팀의 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);
}
}
}
'Java' 카테고리의 다른 글
[백준 17609] 회문 (JAVA) (0) | 2023.06.21 |
---|---|
[백준 2258] 정육점 (JAVA) (0) | 2023.06.20 |
[코드트리] 포탑 부수기 JAVA 풀이 (삼성 SW 역량 기출문제) (0) | 2023.06.09 |
[코드트리] 코드트리 빵 JAVA 풀이 (삼성 SW 역량 기출문제) (0) | 2023.06.09 |
[백준 20055] 컨베이어 벨트 위의 로봇 (JAVA) (0) | 2023.06.09 |