728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Data Structures > Java Comparator
Comparator는 두 객체를 비교하는 데 사용됩니다. 이 챌린지에서는 Comparator를 만들고 이를 사용하여 배열을 정렬합니다.
Player 클래스는 편집기에서 제공됩니다. 이름 문자열과 점수 정수의 2개 필드가 있습니다.
n개의 Player 객체 배열이 주어지면 점수가 감소하는 순서로 정렬하는 Comparator를 작성하십시오. 2명 이상의 플레이어가 같은 점수를 가지고 있는 경우 해당 플레이어를 이름의 알파벳순으로 정렬합니다. 이렇게 하려면 Comparator 인터페이스를 구현하는 Checker 클래스를 만든 다음 Comparator.compare(T o1, T o2) 메서드를 구현하는 int compare(Player a, Player b) 메서드를 작성해야 합니다.
Input Format
- stdin의 입력은 Solution 클래스의 잠긴 스텁 코드에 의해 처리됩니다.
- 첫 번째 줄에는 플레이어 수를 나타내는 정수 n이 있습니다.
n개의 후속 라인은 각각 플레이어의 이름과 점수를 포함합니다.
Constraints
- 0 ≤ score ≤ 1000
- 2명의 플레이어가 같은 이름을 가질 수 있습니다.
- 플레이어 이름은 영문 소문자로 구성됩니다.
Output Format
stdout에 출력할 책임이 없습니다. Solution의 잠긴 스텁 코드는 Checker 개체를 만들고 이를 사용하여 Player 배열을 정렬하고 정렬된 각 요소를 출력합니다.
Sample Input
5
amy 100
david 100
heraldo 50
aakansha 75
aleksa 150
Sample Output
aleksa 150
amy 100
david 100
aakansha 75
heraldo 50
Code
import java.util.*;
// Write your Checker class here
class Checker implements Comparator<Player> {
public int compare(Player p1, Player p2) {
if (p1.score != p2.score) {
return p2.score - p1.score;
}
return p1.name.compareTo(p2.name);
}
}
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);
}
}
}
implements
Java에서 인터페이스(Interface)를 구현하는 클래스가 해당 인터페이스의 메서드를 제공 및 구현함을 나타내는 키워드.
interface MyInterface { void myMethod(); } class MyClass implements MyInterface { public void myMethod() { // myMethod의 구현 내용 } }
Comparator
Java에서 객체를 비교할 때 사용되는 인터페이스.
두 개의 객체를 비교하는 방법을 정의하며, 정렬 및 컬렉션에서 요소의 순서를 결정하는 데 사용.
interface Comparator<T> { int compare(T o1, T o2); }
- compare(T o1, T o2) : 두 객체 o1과 o2를 비교하고, 정수 값을 반환.
Comparator 사용
- 정렬 : 객체를 정렬할 때 정렬 순서를 정의
- 커스텀 정렬 : Java에서 제공되는 정렬 방법 외에 특정한 비교 로직을 구현하여 객체를 정렬
- 컬렉션 정렬 : 컬렉션 프레임워크에서 'Comparator'를 사용하여 컬렉션의 요소를 정렬
- 객체의 비교 : 두 객체를 비교할 때 특정 비교 규칙을 적용할 때 사용
개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.
728x90
반응형
'> 개발-IT-인터넷 > > JAVA' 카테고리의 다른 글
[해커랭크(HackerRank) JAVA 풀이] - Java Dequeue (0) | 2023.10.17 |
---|---|
[해커랭크(HackerRank) JAVA 풀이] - Java Sort (0) | 2023.10.16 |
[해커랭크(HackerRank) JAVA 풀이] - Java Generics (0) | 2023.10.12 |
[해커랭크(HackerRank) JAVA 풀이] - Java Hashset (1) | 2023.10.11 |
[해커랭크(HackerRank) JAVA 풀이] - Java Stack (0) | 2023.10.10 |