(1) 배열의 각 문자열의 n번째 인덱스의 문자를 문자열 앞에 붙여 오름차순 정렬 후 비교한 문자를 빼고 나머지 문자열로 이루어진 배열 반환하자
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = new String [strings.length];
List list = new ArrayList();
for(int i= 0; i<strings.length;i++) {
answer[i] = strings[i].charAt(n) + strings[i];
list.add(answer[i]);
}
list.sort(null);
for(int i= 0 ; i<list.size();i++) {
String a = (String) list.get(i);
answer[i]= a.substring(1);
}
return answer;
}
}
(1) 정렬하기 위한 list 를 만들고 매개변수로 넘어온 strings의 각 문자열 앞에 n번째에 해당하는 문자를 결합하여 list에 넣어 정렬 한다.
(2) list의 결합한 맨 앞 문자를 제외하여 1번째 인덱스부터 substring 함수를 이용하여 배열 answer에 추가한다.
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, new Comparator<String>() {
@Override
public int compare(String s1 , String s2) {
if(s1.charAt(n) == s2.charAt(n)) return s1.compareTo(s2);
else return s1.charAt(n) - s2.charAt(n);
}
});
return strings;
}
(1) strings 배열을 Comparator 객체의 compare 함수를 오버라이딩 하여 기준을 정하여 정렬한다.
(2) 만약 비교하는 두 문자열의 n번째 문자가 같다면 사전식으로 정렬하고 비교하는 두 문자열의 n번째 문자가 다르다면 오름차순 정렬한다.
일단 Comparator 객체의 compare 함수를 오버라이딩 하는 방식은 생각지도 못했다 .. 사실 내가 짠 코드도 힌트를 얻어 풀었는데 처음엔 그냥 각 문자열의 n 번째 문자를 뽑아내서 오름차순 정렬 후 다시 정렬하면 되는줄 알고 단순하게 풀었다. 역시 0Lv이 아니라 1Lv이라 단순하게 생각하면 안되겠다!