Skip to main content

Java Comparator Hackerrank Solution with Explanation | Programming Blog

Comparing Objects with Comparator in Java | Compare and Sort two Objects in Java

Java Comparator Hackerrank Solution

Comparators are used to compare two objects. In this challenge, you'll create a comparator and use it to sort an array.

The Player class is provided for you in your editor. It has 2 fields : a name string and score integer.

Given an array of n Player objects, write a comparator that sorts them in order of decreasing score; if 2 or more players have the same score, sort those players alphabetically by name. To do this, you must create a Checker class that implements the Comparator interface, then write an int compare(Player a, Player b) method implementing the Comparator.compare(T o1, T o2) method.

Input Format

Input from stdin is handled by the locked stub code in the Solution class.
The first line contains an integer, n, denoting the number of players.
Each of the n subsequent lines contains a player's name and score, respectively.

Read full description on Hackerrank Website :-

So let's see solution of above problem.

If you want to learn about Comparator interface in java. Check out below link :-

Solution 1 :-

import java.util.*;

// Write your Checker class here

class Checker implements Comparator<Player> {
    @Override
    public int compare(Player o1, Player o2) {
       if (o1.score > o2.score) {
           return -1;
       } if (o1.score < o2.score) {
           return 1;
       } if (o1.score == o2.score) {
           return o1.name.compareTo(o2.name);
       }
    return 0;
    }
}



class Player{
    String name;
    int score;
    
    Player(String name, int score){
        this.name = name;
        this.score = score;
    }
}

class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();

        Player[] player = new Player[n];
        Checker checker = new Checker();
        
        for(int i = 0; i < n; i++){
            player[i] = new Player(scan.next(), scan.nextInt());
        }
        scan.close();
     
        Arrays.sort(player, checker);
        for(int i = 0; i < player.length; i++){
            System.out.printf("%s %s\n", player[i].name, player[i].score);
        }
    }
}

Input and Output :-

Input
5
amy 100
david 100
heraldo 50
aakansha 75
aleksa 150

Output
aleksa 150
amy 100
david 100
aakansha 75
heraldo 50

Explanation :-

  • Created one Checker class as given instruction. And implements Comparator in Checker class.
  • If you implements Comparable interface then you must to Override its compare method. Same we done in above example.
  • compare functions returns negative integer, zero, or a positive integer, -1, 0, 1.(In Increment order, In decrement order below things are done in Reverse)
    • Return Negative integer (-1) :- When First argument is Less than Second argument.
    • Return Positive integer (1) :- When First argument is Greater than Second argument.
    • Return 0 :- When First argument is Equals to Second argument. 
  •  So, first we check score and if score are same for two objects then we check compare using name, and returns based on that.

We can also minimize above solution.

Solution 2 :-

class Checker implements Comparator<Player> {
    @Override
    public int compare(Player p1, Player p2) {
        if (p1.score == p2.score) {
            return p1.name.compareTo(p2.name);
        } else {
            return p2.score - p1.score;
        }
    }
}

Solution 3 :-

class Checker implements Comparator<Player> {
    @Override
    public int compare(Player o1, Player o2) {
     return (o2.score == o1.score)
        ? o1.name.compareTo(o2.name)
        : o2.score - o1.score;
    }
}

Explanation :-

Here we doing same thing as above solution. 

  • If both objects mark property are same then compare using name property, otherwise compare using score.
 
Happy Coding..
 
Comparing Objects with Comparable interface in Java :-
Sort Object with NULL values using Comparator interface in Java
 

Comments

Popular posts from this blog

Plus Minus HackerRank Solution in Java | Programming Blog

Java Solution for HackerRank Plus Minus Problem Given an array of integers, calculate the ratios of its elements that are positive , negative , and zero . Print the decimal value of each fraction on a new line with 6 places after the decimal. Example 1 : array = [1, 1, 0, -1, -1] There are N = 5 elements, two positive, two negative and one zero. Their ratios are 2/5 = 0.400000, 2/5 = 0.400000 and 1/5 = 0.200000. Results are printed as:  0.400000 0.400000 0.200000 proportion of positive values proportion of negative values proportion of zeros Example 2 : array = [-4, 3, -9, 0, 4, 1]  There are 3 positive numbers, 2 negative numbers, and 1 zero in array. Following is answer : 3/6 = 0.500000 2/6 = 0.333333 1/6 = 0.166667 Lets see solution Solution 1 import java.io.*; import java.math.*; import java.security.*; import java.text.*; import java.util.*; import java.util.concurrent.*; import java.util.function.*; import java.util.regex.*; import java.util.stream.*; import static java.util.st

Flipping the Matrix HackerRank Solution in Java with Explanation

Java Solution for Flipping the Matrix | Find Highest Sum of Upper-Left Quadrant of Matrix Problem Description : Sean invented a game involving a 2n * 2n matrix where each cell of the matrix contains an integer. He can reverse any of its rows or columns any number of times. The goal of the game is to maximize the sum of the elements in the n *n submatrix located in the upper-left quadrant of the matrix. Given the initial configurations for q matrices, help Sean reverse the rows and columns of each matrix in the best possible way so that the sum of the elements in the matrix's upper-left quadrant is maximal.  Input : matrix = [[1, 2], [3, 4]] Output : 4 Input : matrix = [[112, 42, 83, 119], [56, 125, 56, 49], [15, 78, 101, 43], [62, 98, 114, 108]] Output : 119 + 114 + 56 + 125 = 414 Full Problem Description : Flipping the Matrix Problem Description   Here we can find solution using following pattern, So simply we have to find Max of same number of box like (1,1,1,1). And last