| 문제 | 레벨 | 정답률 |
|---|---|---|
| 문자열 내 마음대로 정렬하기 | Lv.1 | 71% |

import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
for(int i = 0; i<strings.length-1; i++){
for(int j = i+1; j<strings.length; j++){
char a = strings[i].charAt(n);
char b = strings[j].charAt(n);
if(a>b){
String str = "";
str = strings[j];
strings[j] = strings[i];
strings[i] = str;
} else if(a == b){
//문자열 전체 사전적 비교
if(strings[i].compareTo(strings[j]) > 0){
String str = "";
str = strings[j];
strings[j] = strings[i];
strings[i] = str;
}
}
}
}
return strings;
}
}
이중 for 문을 사용해서 전체 문자열 돌면서 각각 하나씩 문자열을 뽑음
a,b 문자에 각 문자열의 n 번째 문자를 저장
a가 b보다 알파벳 순서가 뒤라면, 두 문자열 자리 바꾸기
a와 b가 같은 알파벳이라면, 문자열 전체를 사전적 비교하기
a.compareTo(b)
** char에는 적용되지 않음!!
return 값에 따른 의미
a>b
char 문자의 경우 compareTo가 적용되지 않고, 부등호를 이용해서 간단하게 비교하면 된다.
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번째 문자를 기준으로 비교
int charCompare = Character.compare(s1.charAt(n), s2.charAt(n));
if (charCompare != 0) {
return charCompare;
}
// n번째 문자가 같은 경우, 전체 문자열을 사전 순으로 비교
return s1.compareTo(s2);
}
});
return strings;
}
}
Arrays.sort 메서드에서 Comparator를 통해 정렬 방법 재정의
compare 메소드 안에서 n 번째 문자열을 기준으로 비교하고, 그 문자가 다르면 그 결과를 토대로 정렬
문자가 같다면 전체 문자열을 기준으로 정렬
Arrays.sort() 메서드는 알고 있었지만, 이를 활용하여 정렬 방법을 재정의할 생각은 못했던 것 같다.
다음에 배열을 정렬할 일이 있으면 sort 메서드를 적극 활용해야겠다.