[이코테] 정렬 - 성적이 낮은 순서로 학생 출력하기 - JAVA

최영환·2022년 10월 18일
0

이코테

목록 보기
12/24
post-thumbnail

💡 문제

N명의 학생의 성적 정보가 주어진다. 형식은 이름 성적 으로 주어지는데 이때 이들의 성적이 낮은 순으로 학생 이름을 출력하는 문제다.

입력

  • 첫 번째 줄에 학생의 수 N이 입력된다. (1 <= N <= 100,000)
  • 두 번째 줄 부터 N+1 번째 줄 까지 학생의 이름 그리고 성적이 공백으로 주어진다. 학생이름 길이는 100이하, 성적은 100이하 자연수로 주어진다.

출력

  • 모든 학생의 이름을 성적이 낮은 순으로 출력하면된다. 동일한 성적은 자유롭게 출력하면된다.

💬 입출력 예시

입력

2
홍길동 96
이순신 78

출력

이순신 홍길동

📌 풀이(소스코드)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

// Student 클래스 선언
// 정렬을 위해 Comparable 인터페이스를 구현
class Student implements Comparable<Student> {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    // Getter 메소드
    public String getName() {
        return this.name;
    }

    public int getScore() {
        return this.score;
    }

    // comparTo 메소드 재정의
    @Override
    public int compareTo(Student other) {
        if (this.score < other.score) {
            return -1;
        }
        return 1;
    }
}

// 성적이 낮은 순서로 학생 출력하기
public class Sort_02 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 학생 수 입력
        int n = Integer.parseInt(br.readLine());

        // 학생 리스트 입력 및 생성
        List<Student> students = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            String name = st.nextToken();
            int score = Integer.parseInt(st.nextToken());
            students.add(new Student(name, score));
        }

        // 학생 리스트 정렬
        Collections.sort(students);

        // 성적 낮은 순으로 학생 이름 출력
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < students.size(); i++) {
            sb.append(students.get(i).getName()).append(" ");
        }
        System.out.println(sb);
    }
}

📄 해설

  • Comparable 인터페이스를 구현한 Students 클래스를 생성하여 해결하는 문제
  • compareTo 메소드에서 성적 순으로 정렬을 하도록 함
profile
조금 느릴게요~

0개의 댓글