> 개발-IT-인터넷/> JAVA

[해커랭크(HackerRank) JAVA 풀이] - Java Sort

jini:) 2023. 10. 16. 11:02
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Data Structures > Java Sort
 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 

ID, FirstName 및 CGPA와 같은 학생 정보 목록이 제공됩니다. 당신의 임무는 CGPA에 따라 내림차순으로 그것들을 재배열하는 것입니다. 두 학생의 CGPA가 같으면 이름에 따라 알파벳 순서로 정렬합니다. 두 학생의 이름도 같으면 ID에 따라 순서를 지정합니다. 두 명의 학생이 동일한 ID를 가지고 있지 않습니다.

Hint: comparators를 사용하여 개체 목록을 정렬할 수 있습니다. comparators에 대해 알아보려면 Oracle 문서를 참조하세요.

 

Input Format

입력의 첫 번째 줄에는 총 학생 수를 나타내는 정수 N이 포함됩니다. 다음 N 줄에는 다음 구조의 학생 정보 목록이 포함되어 있습니다.

ID Name CGPA

 

Constraints

  • 2 ≤ N ≤ 1000
  • 0 ≤ ID ≤ 100000
  • 5 ≤ |NAME| ≤ 30
  • 0 ≤ CGPA ≤ 4.00

이름에는 영문 소문자만 포함됩니다. ID에는 선행 0이 없는 정수만 포함됩니다. CGPA는 소수점 이하 2자리 이하를 포함합니다.

 

Output Format

위의 규칙에 따라 학생들을 재배열한 후 각 학생의 이름을 별도의 줄에 출력합니다.

 

 

Sample Input

5
33 Rumpa 3.68
85 Ashis 3.85
56 Samiha 3.75
19 Samara 3.75
22 Fahim 3.76

 

Sample Output

Ashis
Fahim
Samara
Samiha
Rumpa

 

 

Code

import java.util.*;

class Student{
	private int id;
	private String fname;
	private double cgpa;
	public Student(int id, String fname, double cgpa) {
		super();
		this.id = id;
		this.fname = fname;
		this.cgpa = cgpa;
	}
	public int getId() {
		return id;
	}
	public String getFname() {
		return fname;
	}
	public double getCgpa() {
		return cgpa;
	}
}

//Complete the code
public class Solution
{
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		int testCases = Integer.parseInt(in.nextLine());
		
		List<Student> studentList = new ArrayList<Student>();
		while(testCases>0){
			int id = in.nextInt();
			String fname = in.next();
			double cgpa = in.nextDouble();
			
			Student st = new Student(id, fname, cgpa);
			studentList.add(st);
			
			testCases--;
		}
        
        studentList.sort(new Comparator<Student>() {
            public int compare(Student s1, Student s2)  {
                int c;
                c = Double.valueOf(s1.getCgpa()).compareTo(s2.getCgpa());
                if( c != 0 ) return -c;
                c = s1.getFname().compareTo(s2.getFname());
                if( c != 0 ) return c;
                return Integer.valueOf(s1.getId()).compareTo(s2.getId());
           }
        });
      
      	for(Student st: studentList){
			System.out.println(st.getFname());
		}
	}
}

 

 

 

개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.

 

 

 

728x90
반응형