2019. 3. 27. 23:02ㆍ알고리즘문제/Hackerrank
Arrays클래스는 배열을 정렬해주는 sort 메소드를 제공한다.
이때 sort 메소드는 아래와 같이 정말 다양한 매개변수를 받을 수 있다...
나는 그 중
sort(T[] a, Comparator<? super T> c) 메소드를 활용할 것이다.
이 방식은 우리가 원하는대로 정렬을 구현할 수 있도록 도와준다. 좋은 녀석 후훗
하지만 조금 복잡하게 느껴질 수 있으므로 많은 연습이 필요한 것 같다.
- Problem
// Checker 클래스를 완성하여라.
이름과 점수 정보를 갖는 Player 클래스가 있다.
Player 이름과 점수 값을 받은 후 점수가 큰 순서대로 나열하라.
이때 점수가 같은 Player는 이름의 알파벳 순으로 나열하라.
- Input
5
dadee 100
hook 100
gyo 50
Dyong 75
kkune 150
- Output
kkune 150
dadee 100
hook 100
Dyong 75
gyo 50
import java.util.*;
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;
}
}
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);
}
}
}
* Comparator 인터페이스를 구현하는 Checker 클래스는
우리가 원하는 정렬이 되도록 compare 메소드를 오버라이딩한다.
* 이 때 점수가 같을 경우에는 compareTo 메소드로 이름 값을 이용한 비교를 전달하고
그렇지 않은 경우에는 내림차순이 될 수 있도록 결과값을 반환한다.
참고 )
- sort 메소드를 활용한 알고리즘 풀이
https://heedipro.tistory.com/227
- Comparator
https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
'알고리즘문제 > Hackerrank' 카테고리의 다른 글
자바 Pattern 클래스 (0) | 2019.04.01 |
---|---|
자바_정규표현식(matches, pattern) (0) | 2019.04.01 |
자바 SortedSet, TreeSet (0) | 2019.03.29 |
자바 NumberFormat, Locale 클래스(나라별 화폐 표시) (0) | 2019.03.27 |
자바8 날짜 클래스 LocalDate (0) | 2019.03.27 |