반응형
풀이
- 2차원 배열 정렬 문제를 계속 찾고 싶었는데
- 내가 원하는 적합한 문제였음.
- 우선 해당 배열에 정수 타입 뿐만 아닌 문자열 타입 데이터도 함께 있는
- Object배열이기에 더 마음에 들었음
- 사실... 이전 다른 코테에서 2차원 배열 정렬에서 해당 코드를 잊어버려서... 크흑
- 무튼 자바에서 정렬하는 방법이 여러가지 있지만
- 나는 아래의 정렬처럼 Comparator을 사용해서 각 인자값 별 조건에 따라 정렬하도록 함.
- (근데 국영수라고 하니까 드라마의 인물이 떠오르긴 하네 ㅎㅎ)
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
public class _10825 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
Object[][] mtx = new Object[N][4];
for (int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine()," ");
for (int j=0; j<4; j++) {
if (j==0) mtx[i][j] = st.nextToken();
else mtx[i][j] = Integer.parseInt(st.nextToken());
}
}
Arrays.sort(mtx, new Comparator<Object[]>() {
public int compare(Object[] o1, Object[] o2) {
if (o1[1]!=o2[1]) return Integer.compare((int)o2[1],(int)o1[1]);
else if (o1[2]!=o2[2]) return Integer.compare((int)o1[2],(int)o2[2]);
else if (o1[3]!=o2[3]) return Integer.compare((int)o2[3],(int)o1[3]);
else {
String s_o1 = (String) o1[0];
String s_o2 = (String) o2[0];
return s_o1.compareTo(s_o2);
}
}
});
for (Object[] li: mtx) bw.write((String)li[0]+"\n");
bw.flush();
}
}
'알고리즘' 카테고리의 다른 글
[백준, 자바, 15723번] n단 논법 (2) | 2024.10.14 |
---|---|
[백준, 자바, 11728번] 배열 합치기 (0) | 2024.10.12 |
[백준, 자바, 17204번] 죽음의 게임 (1) | 2024.10.11 |
[백준, 자바, 1388번] 바닥 장식 (1) | 2024.10.11 |
[백준, 자바, 7562번] 나이트의 이동 (0) | 2024.10.10 |