Hello Programmers/Coders, Today we are going to share solutions of Programming problems of HackerRank of Programming Language Java . At Each Problem with Successful submission with all Test Cases Passed, you will get an score or marks. And after solving maximum problems, you will be getting stars. This will highlight your profile to the recruiters.
In this post, you will find the solution for Java Priority Queue-HackerRank Problem. We are providing the correct and tested solutions of coding problems present on HackerRank. If you are not able to solve any problem, then you can take help from our Blog/website.
Use “Ctrl+F” To Find Any Questions Answer. & For Mobile User, You Just Need To Click On Three dots In Your Browser & You Will Get A “Find” Option There. Use These Option to Get Any Random Questions Answer.
Introduction To Java
JAVA was developed by James Gosling at Sun Microsystems Inc in the year 1991, later acquired by Oracle Corporation. It is a simple programming language. Java makes writing, compiling, and debugging programming easy. It helps to create reusable code and modular programs.
Java is a class-based, object-oriented programming language and is designed to have as few implementation dependencies as possible. A general-purpose programming language made for developers to write once run anywhere that is compiled Java code can run on all platforms that support Java. Java applications are compiled to byte code that can run on any Java Virtual Machine. The syntax of Java is similar to c/c++.
Link for the Problem – Java Priority Queue – Hacker Rank Solution
Java Priority Queue – Hacker Rank Solution
Problem :
In computer science, a priority queue is an abstract data type which is like a regular queue, but where additionally each element has a “priority” associated with it. In a priority queue, an element with high priority is served before an element with low priority. – Wikipedia
In this problem we will test your knowledge on Java Priority Queue.
There are a number of students in a school who wait to be served. Two types of events, ENTER and SERVED, can take place which are described below.
- ENTER: A student with some priority enters the queue to be served.
- SERVED: The student with the highest priority is served (removed) from the queue.
A unique id is assigned to each student entering the queue. The queue serves the students based on the following criteria (priority criteria):
- The student having the highest Cumulative Grade Point Average (CGPA) is served first.
- Any students having the same CGPA will be served by name in ascending case-sensitive alphabetical order.
- Any students having the same CGPA and name will be served in ascending order of the id.
Create the following two classes:
- The Student class should implement:
- The constructor
Student(int id, String name, double cgpa)
. - The method
int getID()
to return the id of the student. - The method
String getName()
to return the name of the student. - The method
double getCGPA()
to return the CGPA of the student.
- The constructor
- The Priorities class should implement the method
List<Student> getStudents(List<String> events)
to process all the given events and return all the students yet to be served in the priority order.
Input Format
The first line contains an integer, , describing the total number of events. Each of the subsequent lines will be of the following two forms:
ENTER name CGPA id
: The student to be inserted into the priority queue.SERVED
: The highest priority student in the queue was served.
The locked stub code in the editor reads the input and tests the correctness of the Student and Priorities classes implementation.
Constraints
Output Format
The locked stub code prints the names of the students yet to be served in the priority order. If there are no such student, then the code prints EMPTY
.
Sample Input 0
12 ENTER John 3.75 50 ENTER Mark 3.8 24 ENTER Shafaet 3.7 35 SERVED SERVED ENTER Samiha 3.85 36 SERVED ENTER Ashley 3.9 42 ENTER Maria 3.6 46 ENTER Anik 3.95 49 ENTER Dan 3.95 50 SERVED
Sample Output 0
Dan Ashley Shafaet Maria
Explanation 0
In this case, the number of events is 12. Let the name of the queue be Q.
- John is added to Q. So, it contains (John, 3.75, 50).
- Mark is added to Q. So, it contains (John, 3.75, 50) and (Mark, 3.8, 24).
- Shafaet is added to Q. So, it contains (John, 3.75, 50), (Mark, 3.8, 24), and (Shafaet, 3.7, 35).
- Mark is served as he has the highest CGPA. So, Q contains (John, 3.75, 50) and (Shafaet, 3.7, 35).
- John is served next as he has the highest CGPA. So, Q contains (Shafaet, 3.7, 35).
- Samiha is added to Q. So, it contains (Shafaet, 3.7, 35) and (Samiha, 3.85, 36).
- Samiha is served as she has the highest CGPA. So, Q contains (Shafaet, 3.7, 35).
- Now, four more students are added to Q. So, it contains (Shafaet, 3.7, 35), (Ashley, 3.9, 42), (Maria, 3.6, 46), (Anik, 3.95, 49), and (Dan, 3.95, 50).
- Anik is served because though both Anil and Dan have the highest CGPA but Anik comes first when sorted in alphabetic order. So, Q contains (Dan, 3.95, 50), (Ashley, 3.9, 42), (Shafaet, 3.7, 35), and (Maria, 3.6, 46).
As all events are completed, the name of each of the remaining students is printed on a new line.
Java Priority Queue – Hacker Rank Solution
import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Comparator; import java.util.PriorityQueue; class Student { private final int id; private final String name; private final double cgpa; public Student(int id, String name, double cgpa) { this.id = id; this.name = name; this.cgpa = cgpa; } public int getID() { return id; } public String getName() { return name; } public double getCGPA() { return cgpa; } } class Priorities { private final PriorityQueue<Student> queue = new PriorityQueue<>( Comparator.comparing(Student::getCGPA).reversed() .thenComparing(Student::getName) .thenComparing(Student::getID)); public List<Student> getStudents(List<String> events) { events.forEach((event) -> { if (event.equals("SERVED")) { queue.poll(); } else { String[] details = event.split(" "); queue.add(new Student(Integer.parseInt(details[3]), details[1], Double.parseDouble(details[2]))); } }); List<Student> students = new ArrayList<>(); while (!queue.isEmpty()) { students.add(queue.poll()); } return students; } } public class Solution { private final static Scanner scan = new Scanner(System.in); private final static Priorities priorities = new Priorities(); public static void main(String[] args) { int totalEvents = Integer.parseInt(scan.nextLine()); List<String> events = new ArrayList<>(); while (totalEvents-- != 0) { String event = scan.nextLine(); events.add(event); } List<Student> students = priorities.getStudents(events); if (students.isEmpty()) { System.out.println("EMPTY"); } else { for (Student st : students) { System.out.println(st.getName()); } } } }
Some truly superb info , Gladiola I discovered this. “The distance between insanity and genius is measured only by success.” by James Bond Tomorrow Never Dies.