
문제 설명
N명의 학생이 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때,
성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오.
입력 조건
첫 번째 줄에 학생의 수 N이 입력된다. (1 <= N <= 100,000)
두 번째 줄에 N + 1번째 줄에는 학생의 이름을 나타내는 문자열 A와 학생의 성적을 나타내는 정수 B가 공백으로 구분되어 입력된다.
문자열 A의 길이와 학생의 성적은 100 이하의 자연수이다.
출력 조건
모든 학생의 이름을 성적이 낮은 순서대로 출력한다.
성적이 동일한 학생들의 순서는 자유롭게 출력해도 상관없다.
풀이 코드
따로 Student 객체를 만들고 객체 정렬을 위해 자바에서 제공하는 Comparable 인터페이스의 compareTo(Object o) 메서드를 재정의하여 풀이했다. 성적 오름차순이기 때문에 return this.grage - o.grade 로 재정의하면 풀이 완료.
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;
class Student2 implements Comparable<Student2>{
String name;
int grade;
public Student2(String name, int grade) {
this.name = name;
this.grade = grade;
}
@Override
public int compareTo(Student2 o) {
return this.grade - o.grade;
}
}
public class 성적이_낮은_순서로_학생_출력하기 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
List<Student2> students = new ArrayList<>();
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String name = st.nextToken();
int grade = Integer.parseInt(st.nextToken());
students.add(new Student2(name, grade));
}
Collections.sort(students);
for (Student2 student : students) {
System.out.print(student.name + " ");
}
}
}
'알고리즘 정리' 카테고리의 다른 글
자바(Java) 알고리즘 문제풀이 부품 찾기 [이코테 / 정렬] (0) | 2022.10.09 |
---|---|
자바(Java) 알고리즘 문제풀이 두 배열의 원소 교체 [이코테 / 정렬] (0) | 2022.10.09 |
자바(Java) 알고리즘 문제풀이 위에서 아래로 [이코테 / 정렬] (0) | 2022.10.09 |
자바(Java) 알고리즘 문제풀이 피로도 [프로그래머스 / 완전탐색] (0) | 2022.09.15 |
자바(Java) 알고리즘 문제풀이 카펫 [프로그래머스 / 완전탐색] (0) | 2022.09.15 |