반응형
📖 문제
TreeSet에 Student 객체를 저장할 때, score 필드값을 기준으로 자동 정렬되도록 구현하고 싶습니다.
TreeSet의 last() 메소드를 호출했을 때 가장 높은 점수의 Student 객체가 리턴되도록 Student 클래스의
밑줄 친 부분과 빈 공간에 알맞은 코드를 작성해보세요.
📦 예제 클래스
Student.java
public class Student /*밑줄 쳐진 곳*/ {
public String id;
public int score;
public Student (String id, int score) {
this.id = id;
this.score = score;
}
// 빈공간
}
TreeSetExample.java
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
TreeSet<Student> treeSet = new TreeSet<Student>();
treeSet.add(new Student("blue", 96));
treeSet.add(new Student("hong", 86));
treeSet.add(new Student("white", 92));
Student student = treeSet.last();
System.out.println("최고 점수 : " + student.score);
System.out.println("최고 점수를 받은 아이디 : " + student.id);
}
}
📌 예제 정답 (Student.java)
public class Student implements Comparable<Student> {
public String id;
public int score;
public Student (String id, int score) {
this.id = id;
this.score = score;
}
@Override
public int compareTo(Student o) {
if (this.score > o.score)
return 1;
else if (this.score == o.score)
return 0;
else
return -1;
}
}
💻 실행 결과
최고 점수 : 96
최고 점수를 받은 아이디 : blue
💬 코드 설명
- TreeSet은 Comparable 또는 Comparator를 기반으로 요소를 자동 정렬합니다.
- Student 클래스에 Comparable<Student> 인터페이스를 구현하여 기본 정렬 기준을 제공합니다.
- compareTo() 메소드에서 score 값을 기준으로 비교하여 정렬이 이루어지게 됩니다.
- 점수가 클수록 더 나중에 정렬되어 last() 호출 시 가장 높은 점수가 선택됩니다.
💡 학습 포인트
- TreeSet의 정렬 기준 이해하기
TreeSet은 요소를 저장할 때 정렬 기준이 반드시 있어야 하며, Comparable을 통해 기본 비교 기준을 설정할 수 있습니다. - Comparable 인터페이스 구현하기
사용자 정의 객체를 정렬 가능한 상태로 만들기 위해 compareTo() 메소드를 구현해야 합니다. - 오름차순 vs 내림차순
- 위 예제에서는 score가 높을수록 나중에 정렬되도록 하여 last()를 호출하면 최고 점수를 가진 객체가 반환됩니다.
- 정렬 방향을 바꾸고 싶다면 compareTo()의 리턴 값을 반대로 조정하면 됩니다.
- TreeSet은 중복을 허용하지 않음
compareTo() 결과가 0이면 동일 객체로 간주되어 중복 저장이 되지 않습니다.
📌 마무리 정리
- 이 문제는 TreeSet을 사용할 때 정렬 기준을 명확히 지정해야 한다는 점을 이해하기 위한 연습 문제입니다.
- Comparable 구현을 통해 Student 객체가 정렬 가능한 구조가 되었으며, last() 호출 시 자동으로 최고 점수 객체가 선택됩니다.
- 실무에서는 랭킹 시스템, 우선순위 처리, 정렬 기준 정의 등에 자주 사용되는 패턴입니다.
'Java > 연습문제' 카테고리의 다른 글
자바 연습문제 - 사용자 정의 함수형 인터페이스 Function 구현 (0) | 2025.05.22 |
---|---|
자바 연습문제 - 람다식을 이용한 Thread 실행 코드 작성 (1) | 2025.05.22 |
자바 연습문제 - Comparator를 이용한 TreeSet 정렬 기준 지정 (0) | 2025.05.22 |
자바 연습문제 - HashMap을 이용한 점수 평균 및 최고 점수 계산 (1) | 2025.05.22 |
자바 연습문제 - HashSet과 equals/hashCode 오버라이딩을 활용한 중복 방지 (0) | 2025.05.22 |
자바 연습문제 - List 컬렉션을 이용한 게시글 데이터 반환 구현 (0) | 2025.05.22 |