다중 조건 정렬
- 다양한 타입의 조건이 혼재해 있다.
- int와 string은 한 배열 같이 넣을 수 없다.
- peron 클래스를 만들어서 다양한 타입의 속성을 관리해준다
- 다중 조건 정렬은 다음과 같이 람다를 사용했다.
- person 클래스의 경우 int형으로 되어 있기에 바로 연산이 가능하다.
- 다음과 같이 모든 속성을 String으로 했을 때는 형변환하여 계산이 필요했다.(좋은 방법은 아닌듯)
- 이렇게 속성의 타입이 다양한 경우에는 클래스를 정의하고 객체로 생성하는 게 좋은 방식인듯 하다. (시간, 메모리 효율 월등히 좋음)
Person 클래스 활용
import java.util.*;
import java.io.*;
public class Main {
static public class Person {
int age;
int order;
String name;
Person(int age, int order, String name) {
this.age = age;
this.order = order;
this.name = name;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
Person[] club = new Person[N];
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
club[i] = new Person(Integer.parseInt(st.nextToken()), i, st.nextToken());
}
Arrays.sort(club, (a, b) -> {
if(a.age == b.age) return a.order - b.order;
return a.age - b.age;
});
for(Person p : club) {
bw.write(p.age+" "+p.name+"\n");
}
bw.flush();
bw.close();
br.close();
}
}
String[]으로 형태 통합
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
String[][] club = new String[N][3];
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
club[i][0] = st.nextToken();
club[i][1] = String.valueOf(i);
club[i][2] = st.nextToken();
}
Arrays.sort(club, (a,b) -> {
if(a[0].equals(b[0])) return Integer.parseInt(a[1]) -Integer.parseInt(b[1]);
return Integer.parseInt(a[0]) -Integer.parseInt(b[0]);
});
for(String[] sa : club) {
bw.write(sa[0]+" "+sa[2]+"\n");
}
bw.flush();
bw.close();
br.close();
}
}