알고리즘/프로그래머스 문제풀이

[프로그래머스] 가장 큰 수 java / 정렬/ Comparator, compare, compareTo 메소드로 String 오름차순 내림차순 정렬

자바칩 프라푸치노 2021. 5. 28. 07:55

 

import java.util.Arrays;
import java.util.Comparator;


public class solution {

	
	public String solution(int[] numbers) {
       String answer = "";
       String[] str = new String[numbers.length];
       for (int i = 0; i < numbers.length; i++) {
		str[i] = String.valueOf(numbers[i]);
	}
       
       Arrays.sort(str, new Comparator<String>() {
    	   @Override
    	public int compare(String a, String b) {
    		return (b+a).compareTo(a+b);
    	}
	});
       
       if(str[0].equals("0")) return "0";
       
       for(String answers : str) {
    	   answer += answers;
       }
       return answer;
    }
	}

 

 

compareTo 메서드

: 문자열의 사전 순 값을 비교하여 그에 해당하는 int값을 리턴한다

a = b일 경우 0

a > b (좌측 값이 큰 경우) 1

a < b (좌측 값이 작은 경우) -1

 

Arrays.sort 를 통해서 내림차순 , 오름차순 정렬이 가능하다.

위의 코드는 내림차순 정렬이고 오름차순은 compareTo의 인자를 숫자를 바꿔주면 된다.

 

그나저나 왜 b+a를 하고 a+b를 하는 것일까!

그것은 바로

a와 b를 그대로 쓰게 되면 9보다 30이 크게 된다.

이 문제에서는 첫번째 숫자가 큰게 더 크므로 9가 30보다 앞에 와야한다,

그러므로 만약에 a 가 9 b가 30이라치면

a+b는 930, b+a는 309가 되는 것이다.

그렇게 하여 비교를 하여 내림차순 정렬을 한다.

 

그리고 정렬을 한 후 문제가 00000만 나와서 첫번째(젤 큰 숫자가) 0일 경우에는 0을 리턴해야한다.

 

그게 아니라면 String배열에 있는 값을 answer에 붙여서 출력한다.

 

728x90