-
[정렬] 문제 이름 : 성적이 낮은 순서로 학생 출력하기 - 객체 정렬, List<T>, CollectionAlgorithm/유형별 문제 풀기 2021. 9. 16. 11:38
문제 설명
N명의 학생 정보가 주어진다. 학생 정보는 학생의 이름과 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오.
사용 개념
객체 오름차순 정렬, List<T> 정렬
문제 해결 아이디어
이름과 성적을 멤버 변수로 가지는 사용자 정의 클래스
List에 해당 객체 저장, Collections을 사용한 오름차순 정렬코드
ㄱ. 이름과 성적을 담을 사용자 정의 클래스 생성
ㄴ. ㄱ에서 생성한 클래스가 Comparable 인터페이스 구현 & compareTo 메서드 오버라이딩 → 이때 정의된 정렬 기준을 해당 클래스의 'natural ordering' 이라고 부름, compareTo()는 'natural comparison method'라고 함 (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Comparable.html)
ㄷ. List<T> list에 StudentInfo 클래스 객체 담기
ㄹ. Collections.sort(List<T> list)를 사용해 리스트 정렬 → 이때 ㄴ에서 오버라이딩한 compareTo()에 작성된 정렬 기준(StudentInfo 클래스의 Natural Ordering) 으로 정렬됨
import java.util.Scanner; import java.util.List; import java.util.LinkedList; import java.util.Collections; // 객체 정렬 class StudentInfo implements Comparable<StudentInfo> { // ㄱ private String name; private int score; StudentInfo(String name, int score){ this.name = name; this.score = score; } public String getName(){ return this.name; } public void setName(String name){ this.name = name; } public int getScore(){ return this.score; } public void setScore(int score){ this.score = score; } // ㄴ @Override public int compareTo(StudentInfo s) { // 오름차순 정렬 구현 return this.score - s.getScore(); } } public class Main { public static void main(String[] args){ Scanner kbd = new Scanner(System.in); List<StudentInfo> list = new LinkedList<StudentInfo>(); // StudentInfo 객체 저장할 리스트 int numberOfStudent = kbd.nextInt(); // 학생 수 for(int i = 0; i < numberOfStudent; i++){ StudentInfo studentInfo = new StudentInfo(kbd.next(), kbd.nextInt()); list.add(studentInfo); // ㄷ } Collections.sort(list); // ㄹ for(StudentInfo studentInfo : list) System.out.print(studentInfo.getName() + " "); kbd.close(); } }
추가 개념 정리
2021.07.30 - [Algorithm/HackerRank] - [Greedy] 문제 이름 : University Career Fair - 사용자 정의 클래스 객체 정렬
→ 사용자 정의 클래스 객체 정렬(2가지 방법), 객체 정렬 기준의 필요성
참고)
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Comparable.html
'Algorithm > 유형별 문제 풀기' 카테고리의 다른 글
[이진 탐색] 문제 이름 : 부품 찾기 - 배열 Sort, Binary Search (0) 2021.11.18 [배열 정렬] 문제 이름 : 두 배열의 원소 교체 (0) 2021.09.30 [정렬] 문제 이름 : 위에서 아래로 - List<E> 정렬, Collections (0) 2021.08.18 [DFS/BFS] 문제 이름 : 미로 탈출 (0) 2021.07.08 [DFS/BFS] 문제이름 : 음료수 얼려 먹기 (0) 2021.07.05