import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
List<String> list = new ArrayList<>();
for(int i=0;i<num;i++) {
list.add(br.readLine());
}
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
int num1 = Integer.parseInt(s1.split(" ")[0]);
int num2 = Integer.parseInt(s2.split(" ")[0]);
if(num1-num2<0) {
return -1;
}
if(num1-num2==0) {
int num3 = Integer.parseInt(s1.split(" ")[1]);
int num4 = Integer.parseInt(s2.split(" ")[1]);
return num3-num4;
}
if(num1-num2>0) {
return 1;
}
return 0;
}
});
StringBuilder sb = new StringBuilder();
for(String val : list) {
sb.append(val+"\n");
}
System.out.println(sb.toString());
}
}
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// Scanner sc = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
List<int[]> arr = new ArrayList<>();
for (int i = 0; i < n; i++) {
String line = br.readLine();
int[] val = {Integer.parseInt(line.split(" ")[0]),
Integer.parseInt(line.split(" ")[1])};
arr.add(val);
}
Collections.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0])
return Integer.compare(o1[1], o2[1]);
return Integer.compare(o1[0], o2[0]);
}
});
for(int[] a : arr) {
System.out.println(a[0]+" "+a[1]);
}
}
}
처음에는 List<String>을 생각하고 풀었는데 시간내에 통과가 되었다. 하지만 List<int[]>을 사용하는 것이 좀 더 메모리에 효율적이다.
정렬 부분에서 새로운 class에 Comparator를 implement를 할 필요 없이 바로 Collection.sort() 내부의 메소드에서 정렬이 가능하다.
반응형
'Algorithm' 카테고리의 다른 글
백준 11720 / 숫자의 합 (0) | 2020.07.09 |
---|---|
백준 10989 / 수 정렬하기 3 (0) | 2020.07.09 |
백준 11652 / 카드 (0) | 2020.07.09 |
백준 10814 / 나이순 정렬 (0) | 2020.07.09 |
StringTokenizer vs Split (0) | 2020.07.07 |