[Java] 12915 문자열 내 마음대로 정렬하기
1. 문제
문자열 내 마음대로 정렬하기
2. 접근방법
- Comparator 사용해서 커스텀 정렬하면 됨
3. 오답코드
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) {
return Character.compare(s1.charAt(n), s2.charAt(n));
}
});
return strings;
}
}
- new Comparator<String>()
- → 꺽쇠 옆 중괄호 쓰기
- Comparator 쓸 때 괄호 위치 주의
- Arrays.sort(){@Override}가 아니라 Arrays.sort({ @Override })
- 자바스크립트 함수랑 비슷하다고 생각하면 됨
- n번째 문자가 같으면 사전순으로 비교하는 분기점 처리안함
- strings = ["abce", "abcd"], n = 2라면
- "abce".charAt(2) = 'c' / "abcd".charAt(2) = 'c'
- 두 문자열의 n번째 문자는 같다.
- 그런데 전체 문자열은 "abce"와 "abcd"로 서로 다르다.
- 만약 우리가 n번째 문자만 비교한다면 둘은 동등한 문자열로 취급되서 정렬 순서가 어떻게 나올지 예측할 수 없다
- 그래서 문제에 n번째 문자가 같으면 문자열 자체를 사전순으로 비교한다는 조건이 있다.
4. 정답코드
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) {
// n번째 문자가 같으면 사 전순 비교
if (s1.charAt(n) == s2.charAt(n)) {
return s1.compareTo(s2);
} else {
// 아니면 n번째 문자 비교
return Character.compare(s1.charAt(n), s2.charAt(n));
}
}
});
return strings;
}
}