728x90
반응형
https://www.acmicpc.net/problem/3758
Team클래스를 만들고,
Team[] list에 각 팀의 정보를 저장한 후
문제에서 제시한 조건대로 정렬하여 순위를 매기면 된다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class P3758 {
static class Team {
int id;
int[] scoreList;
int submitNum;
int lastSubmit;
int totalScore;
}
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int T = 0; T < testCase; T++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 팀 수
int k = Integer.parseInt(st.nextToken()); // 문제수k
int t = Integer.parseInt(st.nextToken()); // 내 팀ID
int m = Integer.parseInt(st.nextToken()); // 로그개수
Team[] list = new Team[n];
for (int i = 0; i < m; i++) {
// 로그수만큼 반복
st = new StringTokenizer(br.readLine());
int teamID = Integer.parseInt(st.nextToken());
int problemNum = Integer.parseInt(st.nextToken());
int score = Integer.parseInt(st.nextToken());
if (list[teamID - 1] == null) {
list[teamID - 1] = new Team();
list[teamID - 1].id = teamID;
list[teamID - 1].scoreList = new int[k + 1];
}
list[teamID - 1].scoreList[problemNum] = Math.max(score, list[teamID - 1].scoreList[problemNum]);
list[teamID - 1].submitNum++;
list[teamID - 1].lastSubmit = i;
}
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = 1; j <= k; j++) {
sum += list[i].scoreList[j];
}
list[i].totalScore = sum;
}
Arrays.sort(list, new Comparator<Team>() {
@Override
public int compare(Team o1, Team o2) {
// TODO Auto-generated method stub
if (o1.totalScore == o2.totalScore) {
if (o1.submitNum == o2.submitNum) {
// 제출횟수는 적은게 좋다.
return o1.lastSubmit - o2.lastSubmit;
}
return o1.submitNum - o2.submitNum;
}
return o2.totalScore - o1.totalScore;// 점수는 높은게 좋다.
}
});
for (int i = 0; i < n; i++) {
if (list[i].id == t) {
// 내 팀 찾음
bw.append(String.valueOf(i + 1) + "\n");
}
}
}
bw.flush();
bw.close();
br.close();
}
}
입력받은 데이터를 잘 정리해서 정렬만 하면 되는 문제였다.
728x90
반응형
'코딩 > 백준-자바' 카테고리의 다른 글
[자바] 백준 2607번: 비슷한 단어 (0) | 2023.03.05 |
---|---|
[자바] 백준 17848번: 진우와 달 여행(Small) (0) | 2023.03.04 |
[자바] 백준 19941번: 햄버거 분배 (0) | 2023.03.03 |
[자바] 백준 1515번: 수 이어 쓰기 (0) | 2023.03.02 |
[자바] 백준 21921번: 블로그 (0) | 2023.03.01 |
댓글