728x90
https://www.acmicpc.net/problem/3758
메모리: 35,844 KB , 시간: 324 ms
사용 알고리즘: 구현, 정렬
728x90
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder answer = new StringBuilder();
int T = Integer.parseInt(br.readLine());
int n, k, t, m, i, j, s;
int[][] teamInfo, score;
for (int tc = 0; tc < T; tc++) {
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
t = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
// 팀 정보를 담을 배열
// teamInfo[i][0] := i번 팀의 팀 번호
// teamInfo[i][1] := i번 팀의 최종 점수
// teamInfo[i][2] := i번 팀의 제출 횟수
// teamInfo[i][3] := i번 팀의 마지막 제출 시간
teamInfo = new int[n + 1][4];
for (int l = 1; l <= n; l++) teamInfo[l][0] = l;
// 팀별 문제 점수
score = new int[k + 1][n + 1];
// 로그 정보 입력
for (int l = 0; l < m; l++) {
st = new StringTokenizer(br.readLine());
i = Integer.parseInt(st.nextToken());
j = Integer.parseInt(st.nextToken());
s = Integer.parseInt(st.nextToken());
// 제출 횟수와 마지막 제출 시간 갱신
teamInfo[i][2]++;
teamInfo[i][3] = l;
if(score[j][i] < s) { // 기존의 점수보다 더 높은 점수를 얻었을 경우
teamInfo[i][1] += s - score[j][i]; // 기존 점수의 차이만큼 최종 점수에 더해줌
score[j][i] = s; // 가장 높은 점수 갱신
}
}
// 정렬
Arrays.sort(teamInfo, (o1, o2)
-> o1[1] == o2[1]
? o1[2] == o2[2]
? o1[3] - o2[3]
: o1[2] - o2[2]
: o2[1] - o1[1]);
// 우리 팀 순위 구하기
for (int l = 0; l < n; l++) {
if(teamInfo[l][0] == t) {
answer.append((l + 1) + "\n");
break;
}
}
}
System.out.print(answer);
}
}
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 10610] 30 (java) (0) | 2025.01.07 |
---|---|
[백준, BOJ 1373] 2진수 8진수 (java) (0) | 2024.12.23 |
[백준, BOJ 2559] 수열 (java) (0) | 2024.12.12 |
[백준, BOJ 2293] 동전 1 (java) (0) | 2024.12.12 |
[백준, BOJ 1357] 뒤집힌 덧셈 (java) (0) | 2024.11.17 |