https://school.programmers.co.kr/learn/courses/30/lessons/12915
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
strings | n | return |
---|---|---|
["sun", "bed", "car"] | 1 | ["car", "bed", "sun"] |
["abce", "abcd", "cdx"] | 2 | ["abcd", "abce", "cdx"] |
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
//같은 인덱스 값으로 정렬했을때도 정렬이 되어야 하므로
//먼저 배열을 정렬부터 한다
Arrays.sort(strings);
//Arrays 클래스의 sort 메서드는 기본으로 오름차순으로 정렬
//따라서 인터페이스 Comparator의 compare메서드를 오버라이드하여 사용
//String 값인 o1, o2를 배열의 원소의 n번째 인덱스 값으로 할당하여
//n번째 인덱스 값을 기준으로 오름차순 정렬을 수행
Arrays.sort(strings, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
o1 = String.valueOf(o1.charAt(n));
o2 = String.valueOf(o2.charAt(n));
return o1.compareTo(o2);
}
});
return strings;
}
}
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;
}
}
속도가 느리지만 아이디어가 좋다.
인덱스 값을 맨 앞으로 옮긴 뒤 정렬한다.
코딩 첫 시작을 하는데 좀 오래 걸렸다.
인덱스 값으로 따로 배열을 만들고 정렬을 하자니 원래 주어진 배열과 어떻게 동기화 시킬거며..
고민을 하다가 최대한 코드를 짧게 쓰고 싶어서
그냥 바로 정렬하는 방법을 찾아 해맸다.
Arrays.sort()는 알고 있었으나 내 뜻에 맞게 정렬 조건을 바꿀수 있는지 찾아보다가
Comparable 인터페이스의 compareTo 메서드와
Comparator 인터페이스의 compare 메서드를 이용할 수 있었다. (매개 변수를 1개를 받냐 2개 받냐의 차이)
나는 2개의 매개변수를 비교해야 하였기 때문에 compare 메서드를 이용하였고
Comparator 인스턴스를 생성하여 compare메서드를 오버라이드하였다.
그리고 다음과 같이 람다식으로도 표현할 수 있었다.
Arrays.sort(strings, (o1, o2) -> {
o1 = String.valueOf(o1.charAt(n));
o2 = String.valueOf(o2.charAt(n));
return o1.compareTo(o2);
});
배열 정렬하기 : https://ifuwanna.tistory.com/232
Comparable과 Comparator
: https://st-lab.tistory.com/243
: https://devfunny.tistory.com/550
: https://hwannny.tistory.com/93