해당 게시글은 [Java] 어서와! 자료구조 알고리즘은 처음이지?https://programmers.co.kr/learn/courses/13577를 간략히 요약한 게시글이며 모든 출처는 해당강의에 있습니다
n번째 문자를 기준으로 정렬하고, 만약 n번째 문자가 같은 문자열 끼리는 사전순으로 정렬하는 커스텀 정렬 문제입니다.
스트림을 이용하여 풀었었습니다.
- 사전순으로 정렬합니다
- n번째 문자를 기준으로 정렬합니다.
사전순으로 먼저 정렬하여 n번째 문자를 기준으로 정렬할때 반영되는 것을 활용하여 문제를 풀었었습니다.
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = Arrays.stream(strings)
.sorted() //사전순
.sorted(new Comparator<String>(){
public int compare(String o1, String o2){
return o1.charAt(n) - o2.charAt(n); //n번째 문자
}
}).toArray(String[]::new);
return answer;
}
}
sorted(new Comparator<String>(){})
: 스트림을 Comparator 객체를 이용하여 커스텀 정렬합니다. public int compare(String o1, String o2){...}
: 오버라이딩하여 두 객체간 차이를 정수로 써 반환합니다. 이 정수값으로 객체들을 정렬합니다.toArray(String[]::new)
: 스트림을 String배열로 변환합니다.람다식이 아닌 Arrays.sort()
메서드를 활용하여 정렬하셨습니다.
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, (s1, s2) -> { //람다식 활용
if(s1.charAt(n) == s2.charAt(n)) return s1.compareTo(s2); //사전 순
return s1.charAt(n) - s2.charAt(n); //n번째 문자 순
});
return strings;
}
}
Arrays.sort(배열, (s1, s2) -> {...})
: 람다식을 활용하여 정렬의 기준을 재정의 할 수 있습니다.