문자열 내 마음대로 정렬하기

문제정의


새로운 기준으로 문자열을 정렬하는 문제이다. 문자열의 n번째 문자를 기준으로 정렬하되, 같은 문자라면 전체 문자에서 사전 중 빠른 문자를 우선으로 한다.

문제풀이


전체 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.*;

public class SortString {

public static void main(String[] args)
{
String[] strings = {"abce", "abcd", "cdx"};
int n = 1;

Arrays.sort(strings, new Comparator<String>(){
@Override
public int compare(String o1, String o2){
if(o1.charAt(n) > o2.charAt(n))
return 1;
else if(o1.charAt(n) < o2.charAt(n))
return -1;
else
{
return o1.compareTo(o2);
}
}
});

}
}
문제 그대로 comparator를 정의하여 sort했다. 최종적으로 시간복잡도는 \(O(nlogn)\)이다.

테스트



필자와 같이 비교하는 연산을 새로 정의하여 쓸 수도 있지만, 다른 사람 풀이 중에 흥미로운 게 있어서 여기에 적어둔다. 문자열 배열에 n번째 문자를 단어의 맨 앞에 추가하여 저장한다. 그리고 이를 정렬하면 따로 비교자를 정의하지 않고도 정렬을 할 수 있다.