준비/알고리즘 공부

[알고리즘] 가장 큰 수

chuseok 2021. 9. 6. 15:37

Comparator 클래스란?

: Comparable이 구현된 클래스들의 기본 정렬 기준과는 다른 방식으로 정렬하고 싶을 때 사용하는 클래스이며, 기본적으로 오른차순이 정렬 기준인 것을 내림차순으로 정렬하는 등의 용도로 사용된다.

private static String solution(int[] numbers) {
	String[] result = new String[numbers.length];
    
	for (int i = 0; i < numbers.length; i++) {
		result[i] = String.valueOf(numbers[i]);
	}
    
	Arrays.sort(result, new Comparator<String>() {
		@Override
		public int compare(String o1, String o2) {
			return ((o2 + o1).compareTo(o1 + o2));
		}
	});
    
    if(result[0].equals("0")) {
    	return "0"; //배열의 원소가 0값으로만 구성되어 있다면 0을 여러개 반환하므로 하나만 출력될 수 있도록 처리한다.
    }
    
	String answer = "";
    
	for (String a : result) {
		answer += a;
	}
    
	return answer;
}

풀이

1. int 배열을 String 배열로 변환한다.

2. Arrays.sort 내부에 정렬 기준을 (new Comparator<>)익명클래스를 사용하여 구현한다.

 

추가

StringBuilder sb = new StringBuilder();

for(Integer i : list) {
	sb.append(i);
}

: 문자열을 합칠 때 String객체를 더하는 행위는 메모리 할당과 메모리 해제를 발생시켜 연산이 많아지면서 성능적으로 좋지 않다. 그러므로 기존의 데이터에 더하는 방식인 StringBuiler를 사용하는 것이 좋다.