코드트리
Novice Mid -> 정렬 -> 객체정렬 -> 개인정보 문제
import java.util.*;
class Person {
String name;
int st_num;
int height;
double weight;
public Person(String name, int height, double weight) {
this.name = name;
this.height = height;
this.weight = weight;
}
}
class NameComp implements Comparator<Person> {
@Override
public int compare(Person person1, Person person2) {
return person1.name.compareTo(person2.name);
}
}
class heightComp implements Comparator<Person>{
@Override
public int compare(Person person1, Person person2){
return person2.height- person1.height;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
Person[] group = new Person[5];
for(int i= 0; i<5; i++){
String name = sc.next();
int height = sc.nextInt();
double weight = sc.nextDouble();
group[i] = new Person(name, height ,weight);
}
Arrays.sort(group, new NameComp());
System.out.println("name");
for(int i = 0; i<5; i++) {
System.out.println(group[i].name + " " + group[i].height + " " + group[i].weight);
}
System.out.println();
System.out.println("height");
Arrays.sort(group, new heightComp());
for(int i = 0; i<5; i++) {
System.out.println(group[i].name + " " + group[i].height + " " + group[i].weight);
}
}
}
이 문제를 풀면서 comparator 개념을 복습 했다.
작년 컴퓨터 프로그래밍 수업에서 배웠던 내용인데 그 이후로 잘 쓰지 않았던 개념이라 구글에서 내용을 다시 찾아봐야 했다. 당연하지만 아무리 배운 내용이라 해도 체화 시키지 않으면 아는 내용이라고 할 수 없는 것 같다.
특히 나는 기초가 많이 부족해서 예습이나 어려운 문제를 푸는 것도 좋지만 방학동안 모각코 활동과 알고리즘 특강을 들으면서 기초를 다시 다지는 것도 좋을 것 같다.
sort() 메서드를 사용할 때 프리미티브 자료형이 아닌 객체를 정렬하고자 한다면 정렬하고자 하는 객체의 class에 comparable 을 implements 한 뒤 compareTo 메서드를 오버라이딩해서 사용해야 한다. 이 경우 비교 기준을 한가지밖에 가질 수 없는데
두개 이상의 비교기준을 갖도록 하고 싶으면
1. comparator를 implements한 class를 새로 정의 해준 뒤 해당 class에서 compare 메서드를 오버라이딩해서 사용하면 된다.
class NameComp implements Comparator<Person> {
@Override
public int compare(Person person1, Person person2) {
return person1.name.compareTo(person2.name);
}
}
class heightComp implements Comparator<Person>{
@Override
public int compare(Person person1, Person person2){
return person2.height- person1.height;
}
}
위의 문제에서는 name을 기준으로 정렬하는 comparator NameComp와 height를 기준으로 정렬하는 comparator HeightComp를 만들어 사용했다. 이 후 sort() 메서드를 사용할 때 인자로 배열과 함께 comparator 객체를 써주면 된다.
2. 한 번만 정렬을 수행해주고 comparator을 재사용하지 않는다면 main 메서드 안에서 무명 클래스를 사용한다.
Arrays.sort(group, new Comparator<Person>() {
@Override
public int compare(Person person1, Person person2) {
return person1.name.compareTo(person2.name);
}
});
Arrays.sort(group, new Comparator<Person>() {
@Override
public int compare(Person person1, Person person2) {
return return person2.height- person1.height;
}
});
'모각코 > 2022 하계 모각코' 카테고리의 다른 글
20220727 3주차 [진저비어] 모각코 결과 (0) | 2022.07.28 |
---|---|
20220727 3주차 [진저비어] 모각코 계획 (0) | 2022.07.27 |
20220713 2주차 [진저비어] 모각코 계획 (0) | 2022.07.13 |
20220706 1주차 [진저비어] 모각코 결과 (0) | 2022.07.06 |
20220706 1주차 [진저비어] 모각코 계획 (0) | 2022.07.06 |