문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때,
각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.
예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
strings 의 인덱스 값의 맨 앞에 정렬해야 하는 알파뱃을 더해준 뒤,
정렬하고 더해줬던 값을 빼줬다.
솔직히 머리 쓰시 귀찮으면 컴파일러에게 노가다를 시켜 풀 수도 있지만 최대한 효율을 추구하기 위해 고민을 많이 하면서 만들어낸 코드고,
개인적으로 결과물도 마음에 든다.
다른 사람의 풀이를 봐도 개인적으로 내 코드가 더 효율적이고 가독성도 좋은 것 같다.
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
for (int i = 0; i < strings.length; i++)
strings[i] = strings[i].charAt(n) + strings[i];
Arrays.sort(strings);
for (int i = 0; i < strings.length; i++)
strings[i] = strings[i].substring(1);
return strings;
}
}
좋아요를 가장 많이 받은 코드이다.
내가 푼 방식과 맥락은 비슷하지만 불필요한 라이브러리와 수식이 더해저 가독성이 떨어진다고 생각했는데
테스트를 해보니 속도면에서는 내 코드보다 빨랐다.
Arrays 보다 Collection 으로 정렬하는 속도가 더 빠른 듯 하다.
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = {};
ArrayList<String> arr = new ArrayList<>();
for (int i = 0; i < strings.length; i++) {
arr.add("" + strings[i].charAt(n) + strings[i]);
}
Collections.sort(arr);
answer = new String[arr.size()];
for (int i = 0; i < arr.size(); i++) {
answer[i] = arr.get(i).substring(1, arr.get(i).length());
}
return answer;
}
}