https://school.programmers.co.kr/learn/courses/30/lessons/12915
문제를 잘 이해해야 하는데 각 단어의 n번째 인덱스의 문자로 정렬 이다. 즉 "u", "e", "a"이렇게 뽑힌다면 뽑힌 문자열을 오름차순 정렬하여
a -> e -> u 순으로 car, bed, sun으로 나오게 하는 것이 문제의 핵심이다.
언제나 문제를 이해하는 것이 핵심이다. 문제를 제대로 이해하면 바로 정답에 도출하기 가까워진다.
하지만 이에 추가 조건이 또 있다.
인덱스가 같은 문자가 여러개일경우, 사전 순으로 앞선 문자열이 앞쪽에 위치한다는 것이다.
- 람다식으로 펼치기
Arrays.sort(strings, (s1, s2) -> { if(s1.charAt(n) == s2.charAt(n)){ return s1.compareTo(s2); } return s1.charAt(n) - s2.charAt(n); });
- new Comparator 사용하기
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); } return s1.charAt(n) - s2.charAt(n); } });
사용하기에는 람다식으로 전개가 이해하고 구현하기 좀 더 쉬워보인다.
하지만 Comparator 의 방식도 반드시 익히고 있어야 한다!
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);
});
// 같은 내용이다.
// 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);
// }
// return s1.charAt(n) - s2.charAt(n);
// }
// });
return strings;
}
}