https://www.acmicpc.net/problem/3758
코드설명
정렬 문제입니다.
팀의 총합점수, 풀이횟수, 가장 최근에 풀이요청한 기록을 입력으로 저장한뒤에,
따로 정렬할 배열을 만들어서 구현합니다.
이떄, 일반적으로는 Implements Comparable<Node> 와 같이 Comparable Interface를 구현해서 구현했었습니다.
이번에는 Comparator 인터페이스를 활용해서 배열을 쉽게 정렬할 수 있습니다. 익명함수를 사용했습니다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; import java.util.StringTokenizer; public class Main { public static int N, C, H, W, K, M, T; public static int answer = 0; public static int[] logRequestCnt, logLatestRequestTime; public static int[][] logHighestScore; //[팀][문제의 개수] = 가장 높은점수 public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); C = Integer.parseInt(st.nextToken()); while(C-- > 0) { 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()); logHighestScore = new int[N][K]; logRequestCnt = new int[N]; logLatestRequestTime = new int[N]; for(int i=0;i<M; i++) { st = new StringTokenizer(br.readLine()); int teamId = Integer.parseInt(st.nextToken()) - 1; int QuestId = Integer.parseInt(st.nextToken()) - 1; int score = Integer.parseInt(st.nextToken()); logHighestScore[teamId][QuestId] = Math.max(logHighestScore[teamId][QuestId], score); logRequestCnt[teamId] += 1; logLatestRequestTime[teamId] = i; } int[][] forSort = new int[N][4]; for(int i=0; i<N; i++) { forSort[i][0] = getAllScoreTeam(i); forSort[i][1] = logRequestCnt[i]; forSort[i][2] = logLatestRequestTime[i]; forSort[i][3] = i; } Arrays.sort(forSort, new Comparator<int[]>() { @Override public int compare(int[] arr1, int[] arr2) { if(arr1[0] == arr2[0]) { if(arr1[1] == arr2[1]) { if(arr1[2] == arr2[2]) { return 0; } return Integer.compare(arr1[2], arr2[2]); } return Integer.compare(arr1[1], arr2[1]); } return Integer.compare(arr2[0], arr1[0]); } }); for(int i=0; i<forSort.length;i++) { if(forSort[i][3] == T - 1) { System.out.println((i+1)); } } } } public static int getAllScoreTeam(int teamNum) { int ret = 0; for(int v : logHighestScore[teamNum]) { ret += v; } return ret; } }
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 5567 결혼식 - BFS(너비우선탐색) + DFS(깊이우선탐색) JAVA (0) | 2024.08.30 |
---|---|
[백준] 4963 섬의 개수 - DFS(깊이우선탐색) JAVA (0) | 2024.08.29 |
[백준] 2644 촌수계산 - DFS(깊이우선탐색) + 비트마스킹(BitMask) JAVA (0) | 2024.08.28 |
[백준] 1793 타일링 - 동적계획법(DynamicProgramming) + 임의 정밀도 / 큰 수 연산(BigInteger) JAVA (0) | 2024.08.23 |
[백준] 1058 친구 - BFS(너비우선탐색) + DFS(깊이우선탐색) + 플로이드–워셜(Floywd Warshall) JAVA (0) | 2024.08.20 |