- 내 방법 풀이
- 주어지는 문자열 배열을 int n번 인덱스 문자를 기준으로 정렬하는 문제
- 처음에 보고 n번 인덱스 문자를 꺼내서 char 배열을 만들어 풀려고 했지만, 정렬 후 문자열 매칭이 어려웠다.
다음 생각한 방법은 n번 인덱스 문자를 strings[i] 앞에 붙여 새로운 배열을 만들어 정렬한 후 맨 앞 문자를 뺀 나머지 문자열을 answer배열에 저장하여 리턴했다.
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = new String[strings.length];
String[] arr = new String[strings.length];
for (int i = 0; i<answer.length; i++) {
arr[i] = strings[i].charAt(n) + strings[i];
}
Arrays.sort(arr);
for (int i = 0; i<answer.length; i++) {
String s = arr[i].substring(1, arr[i].length());
answer[i] = s;
}
return answer;
}
}
- 다른 사람 방법 풀이
- 다른 사람 방법을 찾아보던 중 더 효율적인 코드라고 해서 공부해보았다.
(코드에 대한 인상적인 평가는 '자바스러운 코드'라는 말이었다.)
- Comparator 인터페이스를 사용한 풀이었는데, Comparator는 객체를 비교할 때 사용한다. 객체의 여러 항목 중 비교기준을 사용자가 정하는 것이다. 아래 풀이는 Comparator를 사용해 String 2개의 n번 인덱스를 비교하여 리턴.
import java.util.*;
class Solution {
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 1;
else if(s1.charAt(n) == s2.charAt(n)) return s1.compareTo(s2);
else if(s1.charAt(n) < s2.charAt(n)) return -1;
else return 0;
}
});
return strings;
}
}