자바(Java)_Arrays.sort 메소드 활용

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

 

프로그래머스_문자열_내마음대로_정렬하기(java)

문자열 내 마음대로 정렬하기 1. 문제 https://programmers.co.kr/learn/courses/30/lessons/12915?language=java 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기..

heedipro.tistory.com

- Comparator 

https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html

 

Comparator (Java Platform SE 8 )

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. In the foregoing description, the notation sgn(expression) designates the mathematical s

docs.oracle.com