n이 주어지면 n번째 인덱스의 문자를 기준으로 정렬하되 같은 문자일 경우 사전순 정렬
public String[] solution(String[] strings, int n) {
for (int i = 0; i < strings.length-1; i++) {
for (int j = 0; j < strings.length-i-1; j++) {
if(compareTo(strings[j],strings[j+1],n)>0) {
String temp =strings[j];
strings[j]=strings[j+1];
strings[j+1]=temp;
}
}
}
return strings;
}
public int compareTo(String a, String b, int n) {
if(a.charAt(n)>b.charAt(n)) {
return 1;
}else if(a.charAt(n)==b.charAt(n)) {
return a.compareTo(b); //??
}else {
return -1;
}
}
비교하는 메서드를 만들어서 버블 정렬
다른 사람 풀이 보는데 시간은 오래걸리지만 신박한 방법이 있었다.
비교할 n번째 인덱스를 문자열의 맨 앞으로 가져와서 전체 사전순 정렬해주면
n번째 인덱스로 일차 비교하고 다음 원래 문자열의 사전순 정렬을 실행할 수 있게된다.
public String[] solution2(String[] strings, int n) {
for (int i = 0; i < strings.length; i++) {
strings[i] = strings[i].charAt(n)+strings[i];
}
Arrays.sort(strings);
for (int i = 0; i < strings.length; i++) {
strings[i] = strings[i].substring(1);
}
return strings;
}
아래 방법은 원래 시도해봤는데 compare함수를 오버라이딩 하려면 n을 넣을 수 없어서 포기했었는데
그냥 sort()함수 안에서 Comparator를 생성하면서 정의해주면 solution() 내의 n을 사용할 수 있었다.
public String[] solution3(String[] strings, int n) {
Arrays.sort(strings, new Comparator<String>(){
@Override
public int compare(String s1, String s2){
if(s1.charAt(n) > s2.charAt(n)) return 1;
else if(s1.charAt(n) == s2.charAt(n)) return s1.compareTo(s2);
else if(s1.charAt(n) < s2.charAt(n)) return -1;
else return 0;
}
});
return strings;
}
'Java > Coding Test' 카테고리의 다른 글
시저 암호 문제풀이 (0) | 2023.09.25 |
---|---|
삼총사 문제풀이 (0) | 2023.09.25 |
성격 유형 검사하기 문제풀이 (0) | 2023.09.25 |
약수의 개수와 덧셈 문제풀이 (0) | 2023.09.24 |
달리기 경주 문제풀이 (0) | 2023.09.24 |