
링크
코딩테스트 연습 > 정렬 > 가장 큰 수
풀이순서
- 숫자를 문자열로 만들어서 새로운 배열에 저장
- numbers의 개수만큼 돌면서, 앞뒤로 더한 string을 int로 바꿔 비교하면서 배열 정렬
- String으로 합치기
코드(실패)
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
String[] StringNum = new String[numbers.length];
//int를 String으로 바꿔서 배열에 저장
for(int i=0; i<numbers.length; i++){
StringNum[i] = Integer.toString(numbers[i]);
}
//사전순 정렬
Arrays.sort(StringNum,Comparator.reverseOrder());
//앞뒤숫자 이어붙여서 비교
for(int i=0; i<numbers.length-1; i++){
int num1 = Integer.valueOf(StringNum[i]+StringNum[i+1]);
int num2 = Integer.valueOf(StringNum[i+1]+StringNum[i]);
if(num1 < num2){
String tmp = StringNum[i];
StringNum[i] = StringNum[i+1];
StringNum[i+1] = tmp;
}
}
System.out.println(Arrays.toString(StringNum));
for(String num : StringNum){answer += num;}
if(answer.charAt(0) == '0'){answer = "0";}
return answer;
}
}
참고
- Comparator는 Java에서 제공하는 인터페이스 중 하나입니다.
- 자바에서는 인터페이스를 통해 다형성을 구현하는 경우가 많습니다. 이 때, 인터페이스에 선언된 메서드를 구현하는 것이 필요합니다. Comparator 인터페이스는 두 객체를 비교하는 compare 메서드를 구현해야 합니다.
- 따라서 Comparator 인터페이스를 구현할 때, 인터페이스에 선언된 메서드를 반드시 구현해야 합니다. 이때, @Override 어노테이션을 붙이면 해당 메서드가 오버라이딩한 메서드임을 알려주므로, 실수를 방지할 수 있습니다.
코드(성공)
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
String[] StringNum = new String[numbers.length];
//int를 String으로 바꿔서 배열에 저장
for(int i=0; i<numbers.length; i++){
StringNum[i] = Integer.toString(numbers[i]);
}
//사전순 정렬
Arrays.sort(StringNum,Comparator.reverseOrder());
// Comparator 구현
Arrays.sort(StringNum, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
// s1 + s2와 s2 + s1을 비교하여 더 큰 값을 반환
return (s2 + s1).compareTo(s1 + s2);
}
});
for(String num : StringNum){answer += num;}
if(answer.charAt(0) == '0'){answer = "0";}
return answer;
}
}