이러한 정렬 문제는 예전에 풀어본 경험이 있어서 쉽게 해결했다.
이번엔 toString()
이나 StringBuiler
에 대해 새로운 사용법이 있어서 기록을 남긴다.
sort
에서 Comparator
의 compare
메서드를 Override
해서 사용했는데,
lamda
함수로 간단하게 표현할 수 있다.
members.sort((o1, o2) -> {
if(o1.age == o2.age) {
return 0;
}
return o1.age - o2.age;
});
물론 여기서 if문에 해당하는 부분은 어저피 return 0
이기 때문에 없어도 무방하다.
(문제에서 나타낸 조건을 시각적으로 표현하려고 넣어봤다..)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
class Member{
int age;
String name;
public Member(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return age + " " + name +"\n";
}
}
public class Main {
static List<Member> members = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for(int i=0;i<n;i++) {
StringTokenizer st = new StringTokenizer(br.readLine()," ");
Member member = new Member(Integer.parseInt(st.nextToken()), st.nextToken());
members.add(member);
}
members.sort(new Comparator<Member>() {
@Override
public int compare(Member o1, Member o2) {
if(o1.age == o2.age) {
return 0;
}
return o1.age - o2.age;
}
});
StringBuilder sb = new StringBuilder();
for(Member m : members) {
// 객체를 출력하면 해당 객체의 toString()이 출력
sb.append(m);
}
System.out.println(sb);
}
}